一心技术分享yixineducation.cn
首页/技术文章/桌面开发
桌面开发3 分钟阅读

Windows 桌面与后台:把职责放在合适的位置

从一次保存操作出发,理解界面、后台任务与服务端各自负责什么,以及网络中断时应怎样提示。

从一次保存操作开始

假设要做一个读书笔记工具,用户在窗口中编辑标题,点击保存后把内容同步到服务器。桌面端负责让输入顺手:检查必填项、展示提交进度、保留尚未保存的草稿。服务端负责确认操作者身份、判断是否有权修改这条笔记,并把通过检查的数据可靠地写入存储。

这些检查有时看起来重复,但解决的是不同问题。输入框旁的提示能减少操作失误;服务端校验则必须面对旧客户端、异常请求和权限变化。按钮被隐藏,只能说明当前界面没有提供入口。每次请求能否执行,仍要由持有权威数据的服务端决定。

让窗口持续响应

界面线程承担输入、布局和绘制。在这个线程里执行大文件计算或同步等待网络,窗口容易出现卡顿。网络读写通常使用异步接口等待结果;耗时的计算再考虑交给后台线程。WPF 中更新控件还需遵循线程访问规则,不能从任意工作线程直接修改界面。

这里的后台线程和远端后台服务也应分清。后台线程仍属于本机程序,程序退出后任务可能随之结束。需要在关闭窗口后继续可靠执行的任务,适合交给有持久记录的服务处理。界面可以查询进度,而不必一直保持一个等待中的窗口。

把失败结果说清楚

网络超时只说明客户端没有及时收到结果,保存操作可能已经在服务器完成。对于会产生新记录的请求,可以设计请求标识,并让服务端识别重复提交。客户端再次发送时沿用同一标识,避免一次重试变成两条笔记;这一行为需要服务端明确支持。

界面还应区分正在提交、已经确认和结果待核实。暂时离线时保留草稿,重新连接后查询结果,再决定是否重试。开发时沿着一次操作画出请求、检查、写入和返回四步,通常就能看清某项逻辑应该放在哪里,也能写出比保存失败更有用的提示。

延伸阅读