.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类型》


线程安全

相关推荐
追逐时光者6 小时前
精选 8 款 .NET 开源、前后端分离的快速开发框架,提高开发生产效率!
后端·.net
安得权15 小时前
.NET 把文件上传到Sharepoint - Microsoft Graph API方式
microsoft·.net·sharepoint
薛勇17 小时前
.net中如何选择async/await 和Task.Run?
c#·.net
温暖的苹果19 小时前
【.Net runtime】coreclr(.Net应用启动过程)
c#·.net·.netcore
我是唐青枫20 小时前
深入理解 C#.NET IEnumerable<T>:一切集合的起点
c#·.net
mudtools21 小时前
当传统工单遇见飞书:.NET系统的协作升级之旅
c#·自动化·.net·飞书
唐青枫21 小时前
深入理解 C#.NET Interlocked.Increment:原子操作的核心
c#·.net
AI题库1 天前
1.3 ABP MVC开发环境搭建指南:从零开始快速上手
asp.net·mvc·.net·.netcore
零点零一2 天前
Vs2022不能对xUnit建立.net framework的测试项目,可以安装模板
.net
许泽宇的技术分享2 天前
当AI开始“画“界面:A2UI协议如何让.NET应用告别写死的UI
人工智能·ui·.net·blazor·a2ui