为什么要使用Windows.Forms.Timer?

ih8*_*ie8 5 c# timer winforms

我读了这篇优秀的文章比较.NET Framework类库中的Timer类,得出的结论是,我可以做的任何事情都Windows.Forms.Timer可以做得更好Timers.Timer- 然后是一些.

因此,我想到的一个显而易见的问题是:为什么Windows.FormsTimer会提供?

传统(向后兼容)支持?

其他?

Oha*_*der 8

主要的便利Windows.Forms.Timer是它的事件是在UI(Winforms)线程上触发的.如果您的计时器事件执行UI操作,它可能是最简单的替代方案(而不是调用Control.Invoke/BeginInvokeSynchronizationContext.Post/Send在您的所有事件中).

  • 阅读完所有答案之后,我倾向于同意你的答案:简单编码*简单*案例.但是,如果我想在将来向事件处理程序添加一些耗时的非GUI处理......我得到了一个"定时炸弹"(双关语意图:) (2认同)

Ode*_*ded 6

Windows.Forms.Timer事件被调用UI线程,这样您就可以更新直接从事件处理程序的用户界面,这是不正常使用情况下Timers.Timer(如,你会得到横纱访问冲突异常).

而且,正如@Robert Harvey 回答的那样,它也得到了设计师的支持.

  • 结论是:如果你需要操作GUI,你最好使用***更简单,不需要使用invoke. (2认同)

Adi*_*dil 6

Windows.Forms的一个优点是它在GUI的同一个线程中运行,并且在访问Form控件时没有获得跨线程异常.


Rob*_*vey 5

Windows.Forms.Timer具有设计器支持。因此,它的行为类似于任何其他Winforms组件(即,您可以将其拖动到窗体上,它是Controls集合的一部分,等等)。

System.Windows.Forms.Timer类引发的计时器事件与Windows Forms应用程序中的其余代码是同步的。这意味着正在执行的应用程序代码将永远不会被此计时器类的实例抢占(假设您不调用Application.DoEvents)。Windows.Forms.Timer类触发的事件与Winform控件兼容;您可以安全地与他们互动,而不必致电Invoke()

System.Timers.Timer班是一种基于服务器的计时器,其设计和在多线程环境进行了优化。可以从多个线程安全地访问此计时器类的实例。尽管Invoke()与Winforms进行交互在技术上是必需的,但Timer类确实提供了一个SynchronizingObject属性,您可以在该属性上附加要与之安全交互的Windows窗体。

此处更多信息:http : //msdn.microsoft.com/zh-cn/magazine/cc164015.aspx