compact-framework - 如何在 Compact Framework 上处置 Forms.Timer

标签 compact-framework timer components dispose system.componentmodel

在 Compact Framework 上,System.Windows.Forms.Timer 类不支持 system.componentmodel 构造函数:

支持new 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。

为什么不支持此功能?

当我的表单被处理时,我应该如何最好地处理计时器?看来我有两个主要选择:

  • 将表单的 dispose() 方法从 .designer.cs 移至我的主 .cs 文件中,并在其中添加手动“_timer.dispose()”调用
  • 或者在调用 InitializeComponent() 后,在创建表单时手动将 Timer 对象添加到组件集合中

我应该选择哪个?如果我忘记执行这两项操作之一,计时器将永远存在,使我的表单保持事件状态(因为计时器无法进行 GC,并且它保存对表单的 Timer_Tick() 方法的引用,因此表单永远无法进行 GC )。

此实现决策是否反射(reflect)了我需要注意的 CF 机器上的计时器和处理的一些奇怪之处?

最佳答案

我投票支持选项 3:不要通过表单设计器添加计时器;相反,在代码中手动添加它,并手动将其添加到组件集合中。

我的理由如下:

  • 破坏设计器代码通常是一个坏主意,因此您的第一个选项有代码味道
  • 手动将其添加到组件集合中很容易导致 future 的开发人员(甚至几个月后的您自己)无法理解它为何存在并被砍掉。
  • 我通常不喜欢“混合”对象初始化。如果设计者正在对一个对象进行初始化,则需要对其进行全部操作,或者不进行操作,而不仅仅是部分操作。当代码被维护或在重用期间,当有人复制并粘贴到其他类中时,让它完成一些部分工作是致命的。

关于compact-framework - 如何在 Compact Framework 上处置 Forms.Timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5078064/

相关文章:

c# - Compact Framework - 在加载期间禁用鼠标事件

android - Android OpenCV应用程序中的计时器中的“Context cannot be resolved or is not a field”错误

c# - 应该如何管理在函数范围内声明的定时器的清理?

javascript - 重用具有不同样式的 React 组件

c# - 将 C# 字符串传递给 Windows Mobile 中的非托管 C DLL

c# - 记录错误代码的最佳方法

Windows CE 上的 C# .NET 3.5 CF,更改 DataGrid 中的行背景颜色

python - 每 n 秒更新一个值

components - 配置多媒体组件以在网站文件夹中发布

Java 设置/获取 JFrame 中所有组件的文本