Timer 組件是基於服務器的計時器,它使您能夠指定在應用程序中引發Elapsed 事件的週期性間隔。然後可以操控此事件以提供定期處理。例如,假設您有一臺關鍵性服務器,必須每週7 天、每天24 小時都保持運行。可以創建一個使用Timer 的服務,以定期檢查服務器並確保系統開啓並在運行。如果系統不響應,則該服務可以嘗試重新啓動服務器或通知管理員。
基於服務器的Timer 是爲在多線程環境中用於輔助線程而設計的。服務器計時器可以在線程間移動來處理引發的Elapsed 事件,這樣就可以比Windows 計時器更精確地按時引發事件。
基於Interval 屬性的值,Timer 組件引發Elapsed 事件。可以處理該事件以執行所需的處理。例如,假設您有一個聯機銷售應用程序,它不斷向數據庫發送銷售訂單。編譯發貨指令的服務分批處理訂單,而不是分別處理每個訂單。可以使用Timer 每30 分鐘啓動一次批處理。
注意
當AutoReset設置爲false時,Timer只在第一個Interval過後引發一次Elapsed事件。若要保持以Interval時間間隔引發Elapsed 事件,請將AutoReset設置爲true。
Elapsed事件在ThreadPool線程上引發。如果Elapsed事件的處理時間比Interval長,在另一個hreadPool線程上將會再次引發此事件。因此,事件處理程序應當是可重入的。
注意
在一個線程調用Stop 方法或將Enabled 屬性設置爲false 的同時,可在另一個線程上運行事件處理方法。這可能導致在計時器停止之後引發Elapsed 事件。Stop 方法的示例代碼演示了一種避免此爭用條件的方法。
如果和用戶界面元素(如窗體或控件)一起使用Timer,請將包含有Timer 的窗體或控件賦值給SynchronizingObject 屬性,以便將此事件封送到用戶界面線程中。Timer 在運行時是不可見的。
幾點說明
1 private System.Timers.Timer _TestTimerEvent= new Timer();
1
1、默認的週期是0.1秒執行一次;
2、AutoReset的初始值爲true.
3、它的timer機制和System.Threading.Timer 原理是一樣的。
4、每次週期(Timer)運行一次會新起一個線程。
5、如果Elapsed事件的處理時間比Interval長,它每個週期執行都會新起一個線程,這個線程的執行時間不受interval的限定,可以比interval長,因爲一個新週期執行,又會新起一個線程,Timer起的線程週期就是事件處理時間。