.NET系列 定时器

net一共4种定时器

  1. System.Windows.Forms.Timer 类型 》》WinForm专用
  2. System.Windows.Threading.DispatcherTime类型》》WPF专用
  3. System.Threading.Timer类型》》》它使用 ThreadPool 线程来执行定时操作
  4. System.Timers.Timer类型 》》这种很老了。 它使用基于底层计时器的实现,而不是线程池线程

》》System.Windows.Forms.Timer

.net设计这个定时器的目的是为了方便程序员在Window Form中使用定时器。当一个System.Windows.Forms.Timer类被构造时,当前定时器会和当前线程进行关联。而当计时器的计时达到后,一个定时器消息将被插入到当前线程的消息队列中。当前线程逐一处理消息中的所有消息,并一一派发给各自的处理方法。这样的机制和利用工作者进程定时有很大的区别,事实上,System.Windows.Forms.Timer类型并没有涉及多线程的操作,定时器的设置、定时方法的执行都在同一个线程之上。

这就意味着System.Windows.Forms.Timer并不能准确计时,事实上,当消息阻塞时,定时器的误差将非常大,因为定时器消息只能等待在前面的所有消息处理完后才能得到处理。但是因为System.Windows.Forms.Timer类型的定时器并不涉及多线程的操作,因此是线程安全的,不会发生回调方法重入的问题。

System.Windows.Forms.Timer 并不是线程,而是依赖于UI线程,依赖于Windows消息循环机制而实现的定时器。

所以它可以直接更新UI线程的控件内容(不需要Invoke)。

》》》》》它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。

System.Threading.Timer类型》


线程安全

相关推荐
码观天工2 小时前
.NET 原生驾驭 AI 新基建实战系列(四):Qdrant ── 实时高效的向量搜索利器
c#·.net·向量数据库·qdrant
稀饭过霍2 小时前
C# .NET如何自动实现依赖注入(DI)
java·c#·.net
界面开发小八哥2 小时前
.NET应用UI框架DevExpress XAF v24.2新版亮点:支持.NET 9
ui·.net·界面控件·devexpress·xaf
追逐时光者16 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
后端·.net
界面开发小八哥1 天前
界面开发框架DevExpress XAF实践:如何在Blazor项目中集成.NET Aspire?(一)
.net·界面控件·devexpress·ui开发·xaf
o0向阳而生0o1 天前
23、.NET和C#有什么区别?
开发语言·c#·.net
江沉晚呤时2 天前
从零开始学习 Lucene.Net:.NET Core 中的全文搜索与索引管理
开发语言·c#·.net·mybatis·.netcore·lucene
Eiceblue2 天前
通过C# 将Excel表格转换为图片(JPG/ PNG)
visualstudio·c#·.net·excel
许泽宇的技术分享4 天前
.NET MCP 文档
人工智能·.net