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

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

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

传统(向后兼容)支持?

其他?

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

在UI线程上调用Windows.Forms.Timer事件,以便您可以直接从事件处理程序更新UI,这通常不是Timers.Timer的情况(因为您将获得跨线程访问冲突exception)。

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

Windows.Forms的一个优点是它在GUI的同一个线程中运行,并且在访问Form控件时不会获得跨线程exception。

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

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

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

更多信息: http : //msdn.microsoft.com/en-us/magazine/cc164015.aspx

我认为答案是他们是两种完全不同的计时器。 Windows.Forms.Timer是一个单线程应用程序计时器,非常适合运行应用程序的客户端上存在的计时器。

Timer用于以用户定义的间隔引发事件。 此Windows计时器专为使用UI线程执行处理的单线程环境而设计。 它要求用户代码具有可用的UI消息泵并且始终在同一线程中操作,或者将调用编组到另一个线程上。

相比之下, Timers.Timer是一个基于服务器的计时器,更适合Windows服务。

Timer组件是一个基于服务器的计时器,它允许您指定在应用程序中引发Elapsed事件的重复间隔。 然后,您可以处理此事件以提供常规处理。 例如,假设您有一台必须每周7天,每天24小时运行的关键服务器。 您可以创建一个使用Timer定期检查服务器并确保系统已启动并运行的服务。 如果系统没有响应,则服务可能会尝试重新启动服务器或通知管理员。

您可以在Microsoft找到他们的文档并阅读摘录等内容。

不应该永远不会使用或永远使用,服务两个不同的目的。

我认为它适用于winform设计器集成,因为您可以将其拖到表单上,单击它并在属性窗格中设置其属性。