【发布时间】:2011-07-01 23:22:14
【问题描述】:
在 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 应用程序中将 Timer 添加到表单时,它不会被添加到表单的 IContainer components 字段中,因此当表单被 dispose() 时它不会得到 auto-dispose()d )d.
为什么不支持?
当我的表单被处置时,我应该如何最好地处置计时器?看来我有两个主要选择:
- 将表单的 dispose() 方法从 .designer.cs 移到我的主 .cs 文件中,并在其中添加手动“_timer.dispose()”调用
- 或在调用 InitializeComponent() 之后,在创建表单时手动将 Timer 对象添加到组件集合中
我应该更喜欢哪个?如果我忘记做这两个之一,定时器将永远存在,保持我的表单活着(因为定时器不能被 GCed,它包含对我表单的 Timer_Tick() 方法的引用,所以表单永远不能被 GCed )。
这个实现决定是否反映了我需要注意的关于计时器和在 CF 机器上处理的一些奇怪之处?
【问题讨论】:
标签: compact-framework timer components dispose system.componentmodel