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

Moh*_*dil 67 .net c# 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

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

Vic*_*ban 11

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

Windows.Forms.Timer 是一个控制winforms.

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

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

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


Bil*_*ell 6

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

Winforms.Timer

  • 不能保证在特定时间在UI线程上打勾
  • 滴答延迟直到UI线程空闲
  • 如果UI线程繁忙,将跳过刻度线

DispatcherTimer

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

Threading.Timer

  • 在线程池中的工作线程上滴答-没有用于指定线程的选项
  • 滴答总是准时触发
  • 没有跳过任何内容-在仍在处理以前的报价时,您必须防止出现新的报价

Timers.Timer

  • 包装线程计时器
  • 在从CLR线程池中获取的工作线程上打勾
  • 可以通过提供SynchronizationObject强制在特定线程上打勾
  • 滴答总是准时触发
  • 没有一个被跳过
  • 默默地吃异常

  • 需要更新 .NET 6.0 中的“PeriodicTimer”:https://learn.microsoft.com/en-us/dotnet/api/system.threading.periodictimer?view=net-6.0 (6认同)
  • *蜱虫总是准时触发*。永远是一个强烈的词。AFAIK 需要一个可用的线程池线程才能按时发生刻度。 (2认同)