【问题标题】:Threading.Timer vs. Forms.TimerThreading.Timer 与 Forms.Timer
【发布时间】:2009-01-06 22:21:16
【问题描述】:

这个问题的简短形式:什么时候,如果有的话,在多线程 WinForms 应用程序中使用 Forms.Timer 是否合适?

更具体地说,我正在构建一个应用程序,该应用程序使用多个 System.Threading.Timers 异步启动进程,检查包含这些异步进程结果的队列,并更新应用程序主窗体显示的统计信息。

在这样的应用程序中,使用 Forms.Timer 来实际检查应用程序统计数据并将其绘制到主窗体是否合适,或者这只会影响应用程序的平稳运行?

【问题讨论】:

    标签: .net winforms multithreading .net-2.0


    【解决方案1】:

    Forms.Timer 注册定时器以在定时器关闭时发送消息。引发的事件被视为 GUI 事件。 System.Threading.Timer 使用线程阻塞方法。基本上,您应该将Forms.Timer 用于面向GUI 的计时器(为用户界面添加一些效果),并使用Threading.Timer 来安排任务和其他事情。

    【讨论】:

    • 根据大卫在下面达科他州提到的文章,Forms.Timer 会在计时器关闭时发送一个事件并且如果 UI 还没有忙碌 并且 在窗体线程上执行。它会为您完成一些同步工作和跨线程调用。
    【解决方案2】:

    MSDN 有一个 comparison article 来处理主题。

    【讨论】:

    • 体面的文章。出于本次讨论的目的,最好总结一下两者之间的差异(Threading.Timer 需要同步但提供更多控制,Forms.Timer 不一定会为每个滴答声生成一个事件,等等。 )
    • @t3rse: 链接失效:(
    • 这篇文章可作为“MSDN 杂志 - 2004 年 2 月”的 .chm file 获得。
    【解决方案3】:

    我同意 Mehrdad 和 David 的说法,但您应该知道,计时器不能保证及时性、顺序或执行。定时器太多,应用程序就会挂起 ;-)

    【讨论】:

    • 我知道的就这么多。在这个特定的架构中,既不需要确定的执行顺序,也不需要任何特定的及时性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多