System.Windows.Forms.Timer執(zhí)行的時候,如果你在過程中間加一個sleep整個的界面就死掉了, 但是另外兩個沒有這個情況,System.Timers.Timer、System.Threading.Timer! System.Timers.Timer、System.Threading.Timer這兩個平時用的時候沒有發(fā)現(xiàn)太大的區(qū)別,定時的精度都差不多。 一般我個人用的話,還是用的System.Threading.Timer比較多,用編程的方法比較好用! System.Windows.Forms.Timer是基于UI的 System.Timers.Timer是基于服務 System.Threading.Timer是基于線程 除了Timer只能用于界面,其他的事在沒看出區(qū)別 System.Windows.Forms.Timer 還有 WPF那個timer是單線程的 單次運行時間過長會影響下次觸發(fā) 精度差 System.Threading.Timer 都是多線程的 單次運行時間過長不會影響下次觸發(fā) 精度高 System.Threading.Timer 是一個簡單的輕量計時器,它使用回調方法并由線程池線程提供服務。不建議將其用于 Windows 窗體,因為其回調不在用戶界面線程上進行。System.Windows.Forms.Timer 是用于 Windows 窗體的更佳選擇。要獲取基于服務器的計時器功能,可以考慮使用 System.Timers.Timer,它可以引發(fā)事件并具有其他功能。 在《CLR Via C#》中講多線程時有提到這3個計時器,但作者說System.Timers.Timer是對System.Threading.Timer的報裝,不推薦使用,但是在我的WEB項目中的Application_Start中我還是使用的這個而不是Threading.Timer,因為使用Threading.Timer時只執(zhí)行了一次就不在執(zhí)行了。 對于計時器在B/S結構中的使用就復雜一些,一般我們把計時器放在Application_OnStart中,這樣全局維護一個計時器,可以進行定期備份數(shù)據(jù)庫,定期維護用戶等操作,而且方法寫作靜態(tài)的,以免被垃圾回收。而不建議在一般的aspx頁面中使用,因為服務器端的定時器對用戶這樣意義不大,完全可以使用JS代替。而且這個頁面的每個請求都可能引入一個新的定時器,導致系統(tǒng)崩潰。另外,定時器是ASP.NET進程,IIS有關,所以對用重要的執(zhí)行任務,還是建議寫成服務或獨立程序放在服務器上執(zhí)行好了。 參考:http://blog./12639172/viewspace-571197 出處:http://www.cnblogs.com/tianciliangen/p/4910503.html
|