为什么 .NET 中有 5 个版本的计时器类
本文关键字:计时器 版本 NET 中有 为什么 | 更新日期: 2023-09-27 18:32:23
为什么.Net框架中有五个计时器类,分别是:
-
System.Timers.Timer
-
System.Threading.Timer
-
System.Windows.Forms.Timer
-
System.Web.UI.Timer
-
System.Windows.Threading.DispatcherTimer
为什么有多个版本的计时器类?它们之间有什么区别?
以下是对主要计时器的描述以及我认为最值得注意的要点。
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 组件,用于在定期间隔。