gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:33:50 28 4
gpt4 key购买 nike

在 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

这意味着,当我将 Timer 添加到 CF 应用程序中的表单时,它不会被添加到表单的 IContainer 组件字段中,因此当表单是 dispose()d 时它不会得到 auto-dispose()d。

为什么不支持这个?

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

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

  • 我应该更喜欢哪个?如果我忘记执行这两个操作之一,Timer 将永远存在,让我的表单保持事件状态(因为 Timer 不能被 GCed,并且它持有对我的表单的 Timer_Tick() 方法的引用,所以该表单永远不会被 GCed )。

    这个实现决定是否反射(reflect)了我需要注意的关于定时器和在 CF 机器上处理的一些奇怪之处?

    最佳答案

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

    我的推理如下:

  • 使用设计器代码通常是个坏主意,所以你的第一个选项有代码味道
  • 手动将它添加到组件集合中很容易让 future 的开发人员(甚至几个月后的你)不理解它为什么在那里并被砍掉。
  • 我通常不喜欢“混合”对象初始化。如果设计者正在对对象进行初始化,则它需要全部执行或不执行任何操作,而不能只是部分执行。当代码被维护或重用时,当有人复制并粘贴到其他类时,让它做一些部分工作是致命的。
  • 关于compact-framework - 如何在 Compact Framework 上处理 Forms.Timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5078064/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com