我有各种各样的小型C#winforms应用程序(尽管这应同样适用于任何.NET应用程序),它们在关闭时需要执行一些次要任务。

我一直在使用.FormClosing事件来执行诸如写入当前设置文件并等待后台线程完成等操作。

就最佳实践而言,我想到了两个问题:


关闭表单时是否需要停止计时器(或类似任务)?知道终止应用程序应该丢弃计时器后,在窗体的结尾处发出timer.Stop()是个好主意吗?一旦输入.FormClosing方法,计时器是否可以再次触发?
最后的任务(例如写入设置文件)是否应该在.FormClosing.FormClosed事件(或其他事件)中,为什么?


很抱歉将这些问题组合在一起,但我感到它们之间的联系非常紧密,足以保证有一个线程可以正确关闭基于表单的应用程序。

最佳答案

我应该停止计时器吗?


并非如此,但也不会造成伤害。


FormClosing之后可以触发计时器吗?


整rick这不是正常情况,但是,如果关闭链中的某些代码调用Application.DoEvents(),我不会排除它。始终对防御程序编程是一个好主意。


最后的任务应该在.FormClosing还是.FormClosed中?


FormClosing是有条件的,其主要功能是显示“首先保存?”盒子或类似的东西。我会将所有内容都放在FormClosed中,除非确实需要更早(例如,它要求其他组件/控件处于活动状态和活动状态)。

07-24 12:36