1、System.Timers.Timer应该是底层定时器,是比线层还底层、优先级更高的存在,是硬件定时器,理论上,它是最精准的。如果程序设计出错,你会发现exception里有“中断”字样、“外部访问”字样,中断机制是从30年前的DOS系统开始就有了。
2、System.Threading.Timer顾名思义是线程级别的定时器,它的时间是“线程时间”,放在主线程里调度子线程和逻辑模块是合适的,不会像第一个定时器,主线程退出了它可能还在。
3、System.Windows.Forms.Timer则是基于winform的定时器,它与form窗体绑定在一起,如果它阻塞,form界面就不会响应。它比较适合处理纯form元素的功能。另一个与它类似的是wpf里的System.Windows.Threading.DispatcherTimer,也是界面级的定时器。由于form和wpf的机制不同,所以就控件本身而言,不说cpu运算代价,form可以实现控件的并行效果,理论上wpf则不行。
第一个用错:导致野线程
第二个用错:逻辑功能停摆
第三个用错:界面卡死
这也是为什么C# 设计上强化了消息机制,消息本质上是一个0等待的、只执行一次的Timer,等于C#把定时器封装了,以此减少程序员的使用Timer的错误。