我有各种各样的小型C#winforms应用程序(尽管这应同样适用于任何.NET应用程序),它们在关闭时需要执行一些次要任务。
我一直在使用.FormClosing
事件来执行诸如写入当前设置文件并等待后台线程完成等操作。
就最佳实践而言,我想到了两个问题:
关闭表单时是否需要停止计时器(或类似任务)?知道终止应用程序应该丢弃计时器后,在窗体的结尾处发出timer.Stop()
是个好主意吗?一旦输入.FormClosing
方法,计时器是否可以再次触发?
最后的任务(例如写入设置文件)是否应该在.FormClosing
或.FormClosed
事件(或其他事件)中,为什么?
很抱歉将这些问题组合在一起,但我感到它们之间的联系非常紧密,足以保证有一个线程可以正确关闭基于表单的应用程序。
最佳答案
我应该停止计时器吗?
并非如此,但也不会造成伤害。
FormClosing之后可以触发计时器吗?
整rick这不是正常情况,但是,如果关闭链中的某些代码调用Application.DoEvents(),我不会排除它。始终对防御程序编程是一个好主意。
最后的任务应该在.FormClosing还是.FormClosed中?
FormClosing是有条件的,其主要功能是显示“首先保存?”盒子或类似的东西。我会将所有内容都放在FormClosed中,除非确实需要更早(例如,它要求其他组件/控件处于活动状态和活动状态)。