在 Compact Framework 上,System.Windows.Forms.Timer 类不支持 system.componentmodel 构造函数:
支持新的 Timer():http: //msdn.microsoft.com/en-us/library/aa335543 (v=vs.71).aspx
不支持新计时器(IContainer 容器):http: //msdn.microsoft.com/en-us/library/aa335544 (v=vs.71).aspx
这意味着,当我将计时器添加到 CF 应用程序中的表单时,它不会被添加到表单的 IContainer 组件字段中,因此当表单被 dispose()d 时,它不会得到 auto-dispose()d。
为什么不支持这个?
当我的表单被处置时,我应该如何最好地处置计时器?看来我有两个主要选择:
- 将表单的 dispose() 方法从 .designer.cs 移到我的主 .cs 文件中,并在其中添加手动“_timer.dispose()”调用
- 或在调用 InitializeComponent() 之后,在创建表单时手动将 Timer 对象添加到组件集合中
我应该更喜欢哪个?如果我忘记执行这两个操作之一,则 Timer 将永远存在,使我的表单保持活动状态(因为 Timer 无法被 GC,并且它包含对我表单的 Timer_Tick() 方法的引用,因此表单永远不会被 GC )。
这个实施决定是否反映了我需要注意的关于计时器和处理 CF 机器的一些奇怪之处?