94

为什么.Net框架中有五个定时器类,分别是:

  1. System.Timers.Timer
  2. System.Threading.Timer
  3. System.Windows.Forms.Timer
  4. System.Web.UI.Timer
  5. System.Windows.Threading.DispatcherTimer

为什么有多个版本的 Timer 类?它们之间有什么区别?

4

3 回答 3

35

以下是对主要计时器的描述以及我认为最值得注意的要点。

Winforms.Timer

  • UI线程上的滴答声不能保证在特定时间出票
  • 滴答声延迟到 UI 线程空闲
  • 如果 UI 线程忙,将跳过刻度

DispatcherTimer

  • 在 UI 线程上调用
  • 可以设置生成刻度所需的“空闲”级别的优先级
  • 将跳过刻度

Threading.Timer

  • 来自线程池的工作线程上的滴答声 - 没有指定线程的选项
  • 滴答声总是按时触发
  • 没有一个被跳过 - 当您仍在处理以前的刻度时,您必须防止新的刻度
  • 未处理的异常会使应用程序崩溃

Timers.Timer

  • 线程定时器的包装
  • 从 CLR 线程池获取的工作线程上的滴答声
  • 可以通过提供 SynchronizationObject 来强制在特定线程上打勾
  • 滴答声总是按时触发
  • 没有一个被跳过
  • 默默吃例外
于 2019-08-30T18:00:58.240 回答
12

Timers.Timer在设定的时间间隔后生成事件,并可选择生成重复事件。MSDN

Windows.Forms.Timer是winforms的控件。

Web.UI.Timer以定义的时间间隔执行异步或同步网页回发。MSDN

Threading.Timer是回调的计时器。为工作创建一个新线程。由线程池线程提供服务。MSDN

因此,这些计时器有不同的用途,它们也由不同的工具提供服务。

于 2018-03-28T16:27:34.170 回答
3

微软现在在 MSDN 文章中回答了这个问题system.timers.timer

https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=net-5.0

小费

请注意,.NET 包含四个名为 Timer 的类,每个类都提供不同的功能:

System.Timers.Timer(本主题):定期触发事件。该类旨在用作多线程环境中的基于服务器或服务组件;它没有用户界面,在运行时不可见。

System.Threading.Timer:定期在线程池线程上执行单个回调方法。回调方法是在定时器实例化时定义的,不能更改。与 System.Timers.Timer 类一样,此类旨在用作多线程环境中的基于服务器或服务组件;它没有用户界面,在运行时不可见。

System.Windows.Forms.Timer(仅限 .NET Framework):定期触发事件的 Windows 窗体组件。该组件没有用户界面,设计用于单线程环境。

System.Web.UI.Timer(仅限 .NET Framework):一个 ASP.NET 组件,它定期执行异步或同步网页回发。

于 2020-12-08T21:53:39.763 回答