.net框架中计时器(Timer)的这些事
.net的基础库提供了4个类别的计时器,使用的时候经常搞混,为了更好的使用这几个计时器,把每个的情况整理如下:
类别 |
说明 |
使用场景 |
System.Threading.Timer
mscorlib (in mscorlib.dll) |
要在一个线程池上执行定时的(周期性发生的)后台任务是,常用的计时器 触发器方法在系统提供的线程池中执行(不是在创建计时器的线程) |
不更新UI的情况基本都适用 |
System.Windows.Forms.Timer
System.Windows.Forms.dll |
构造这个类的一个实例,相当于告诉Windows将一个计时器和调用线程关联(Win32的SetTimer).这个计时器触发时,Windows将一条计时器消息(WM_TIMER)插入线程的消息队列,消息循环提取到这个消息时,执行计时器的回调函数。 注意:所有这些工作都是由一个线程完成,计时器方法不会由多个线程并发执行 |
Windows Form界面部分适用,在计时器触发中可以处理界面,不需要线程的手动切换 |
System.Windows.Threading. DispatcherTimer
WindowsBase.dll |
这个是System.Windows.Forms.Timer在Silverlight和WPF应用程序中的等价物 |
WPF Silverlight界面部分适用 |
System.Timers.Timer
System (in System.dll) |
这个计时器基本上是System.Threading的Timer的一个包装类。计时器触发时,会导致CLR将事件放到线程池的队列中。这个类继承于Component,因此可在IDE中可视化使用。 |
历史遗留,一般不使用【Jeff Richter语】 不过MSDN提到这个是基于服务器的计时器,特殊场景可用 The server-based Timer is designed for use with worker threads in a multithreaded environment. Server timers can move among threads to handle the raised Elapsed event, resulting in more accuracy than Windows timers in raising the event on time. |
根据以上场景,你就可以正确选择自己的计时器了。
参考 “CLR Via C# Jeffrey Richter”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南