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