C#Forms.Timer、Timers.Timer、Threading.Timer的区别

一、System.Windows.Forms.Timer

1、基于Windows消息循环,用事件方式触发,在界面线程执行;是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler。在这种Timer的EventHandler中可 以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的。

2、它是一个基于Form的计时器
3、创建之后,你可以使用Interval设置Tick之间的跨度,用委托(delegate)hook Tick事件
4、调用Start和Stop方法,开始和停止
5、完全基于UI线程,因此部分UI相关的操作会在这个计时器内进行
6、长时间的UI操作可能导致部分Tick丢失

7、定时器任务执行时间比较长时,不建议使用Forms.Timer,会出现界面假死现象,建议使用Timers.Timer,不会界面假死,并且精度更高!

二、System.Timers.Timer

1. 用的不是Tick事件,而是Elapsed事件
2. 和System.Windows.Forms.Timer一样,用Start和Stop方法
3. AutoReset属性决定计时器是不是要发起一次事件然后停止,还是进入开始/等待的循环。System.Windows.Forms.Timer没有这个属性
4. 设置对于UI控件的同步对象(synchronizing object),对控件的UI线程发起事件

三、System.Threading.Timer
using System.Threading.Timer;
属于轻量级计时器,提供以指定的时间间隔执行方法的机制,无法继承此类。

结论:
1、定时器中的执行任务比较耗时时,使用Timers.Timer和Threading.Timer更合适;

2、多线程时,Timers.Timer和Threading.Timer比较,建议使用Timers.Timer。

3、Forms.Timer适用在任务执行时间较短时使用。否则占用窗体UI线程,导致界面卡死等占用资源的情况。

原文地址:https://www.cnblogs.com/dachuang/p/15667441.html