为什么 .NET 中有 5 个版本的计时器类

本文关键字:计时器 版本 NET 中有 为什么 | 更新日期: 2023-09-27 18:32:23

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

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

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

为什么 .NET 中有 5 个版本的计时器类

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

Winforms.Timer

  • UI 线程上的刻度
  • 刻度延迟到 UI 线程空闲
  • 如果 UI 线程繁忙的时间足够长以至于多个刻度堆积起来,则会跳过刻度

DispatcherTimer

  • 在 UI 线程上调用
  • 可以设置生成即时报价所需的"空闲"级别的优先级
  • 如果它们堆积起来,会跳过蜱虫

Threading.Timer

    线程
  • 池中的工作线程上刻度 - 没有用于指定线程的选项
  • 刻度总是按时触发
  • 没有跳过 - 您必须在处理以前的即时报价时防止新的即时报价
  • 未经处理的异常将使应用程序崩溃

Timers.Timer

  • 线程计时器周围的包装器
  • 从 CLR 线程池中获取的工作线程上的刻度
  • 可以通过提供同步对象强制在特定线程上打勾
  • 刻度总是按时触发
  • 没有跳过
  • 默默吃例外
Timers.Timer

设定的时间间隔后生成事件,并提供生成周期性事件的选项。MSDN

Windows.Forms.Timer是 winform 的控件。

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

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

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

此问题现在由 MSDN 文章中的Microsoft回答system.timers.timer

https://learn.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 组件,用于在定期间隔。