跳到主要内容

~/posts · 2026.11.05

关窗口和退出程序,终于分开了

托盘图标只是入口,后台任务、草稿和 Go 子进程需要一条明确的退出路径。

1 分钟 devshan

电脑上点关闭,窗口没了,后台图标也找不到。我本来只是想把它收起来,结果程序直接退出,正在传的文件也停了。

现在普通关闭只隐藏窗口,传输和 Go 核心继续运行。点托盘或者菜单里的打开,会恢复原窗口,草稿和滚动位置都在。再次启动应用也会回到已有实例,避免多起一个核心抢端口。

我没有销毁窗口再重建,日常收起和恢复可以直接沿用里面的状态。

从托盘退出

真正退出放在托盘右键菜单里。退出时先暂停或收尾任务,停止导出,释放媒体预览,再停 Go 子进程、销毁托盘,最后结束应用。

这里要处理两个事件的交叉:退出过程中会关窗口,窗口的关闭处理得放行;退出开始以后,托盘的打开回调也要停止。相关状态收进同一处,记录窗口是否存在、是否正在退出、收尾是否已经开始。

我分别检查了源码启动和打包运行。正式包的核心路径、子进程和安装器事件与开发时有差异,安装器生命周期消息需要在普通启动之前处理。

这轮只做日常后台运行,没有加开机启动和系统服务。后续升级提示里的退出操作,也可以沿用这条收尾流程。