为什么.NET中有5个Timer类的版本?

时间:2012-04-25 13:48:54

标签: c# .net timer

为什么.Net框架中有五个计时器类,即:

  1. System.Timers.Timer
  2. System.Threading.Timer
  3. System.Windows.Forms.Timer
  4. System.Web.UI.Timer
  5. System.Windows.Threading.DispatcherTimer
  6. 为什么有几个版本的Timer类?它们之间有什么区别?

3 个答案:

答案 0 :(得分:10)

Timers.Timer在设置的时间间隔后生成一个事件,并提供生成重复事件的选项。 MSDN

Windows.Forms.Timer是winforms的控件。

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

Threading.Timer是Callbacks的计时器。创建一个新的Thread来工作。由线程池线程提供。 MSDN

因此,这些计时器有不同的用途,也有不同的工具。

答案 1 :(得分:7)

以下是主要计时器的说明以及我认为最值得注意的几点。

Winforms.Timer

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

DispatcherTimer

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

Threading.Timer

  • 在线程池中打勾工作线程-没有用于指定线程的选项
  • 检票总是准时触发的
  • 没有人跳过-您仍在处理以前的价格变动时必须防止出现新的价格变动

Timers.Timer

  • 围绕线程计时器的包装器
  • 对从CLR线程池中获取的工作线程进行打勾
  • 可以通过提供SynchronizationObject来强制在特定线程上打勾
  • 检票总是准时触发的
  • 没有人跳过
  • 静静地吃着异常

答案 2 :(得分:0)

Microsoft在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 Forms组件,该组件定期触发事件。该组件具有 没有用户界面,设计用于单线程 环境。

System.Web.UI.Timer(仅.NET Framework):一个ASP.NET组件,它在以下位置执行异步或同步网页回发 定期间隔。