System.Windows.Forms.Timer , 该 Timer 必须在 Winform 程序中使用,依赖于某个窗体;当窗体的主ui线程正在执行其他的消息时, Timer的时间就会被丢弃
System.Timers.Timer 该Timer的事件默认执行在一个线程池中的工作线程(worker thread)中,不会像 Windows.Forms.Timer 那样一但主消息线程忙,就会丢失事件;
System.Threading.Timer , 这个Timer 总的来讲是对具体应用环境以来最小的,所以可以在任何多线程环境中是用的Timer。 时间处理代码也是在线程池中的线程上执行。但是由于灵活性,它就没有提供很多现有的比如 直接访问 窗体控间,或者 通过设置 SynchronizingObject 属性 来指定执行线程。在对线程环境中我们需要自己编码来提供代码的同步,互斥等安全性。
简单的说在一个winfrom的UI页面里定时出发用Forms.Timer(精度会有丢失),单线程的定时启动用Threading.Timer,如果有并发访问互斥资源的定时要求用Timers.Timer
另外,如果是单线程的定时启动,可以优先用Spring Quartz