System.Threading.Timer 定時器的用法

  System.Threading.Timer 是C# 中的一個定時器,能夠定時(不斷循環)執行一個任務。它是在線程上執行的,具備很好的安全性。爲此  .Net Framework 提供了5個重載的構造器方法。官網的文檔是這樣解釋的:html

  System.Threading.Timer 是一個簡單、 輕型計時器,它使用回調方法,並由線程池線程提供服務。 但不建議使用 Windows 窗體,由於它的回調不會在用戶界面線程上發生。 System.Windows.Forms.Timer 是使用 Windows 窗體的更好選擇。 對於基於服務器的計時器的功能,您能夠考慮使用 System.Timers.Timer, ,它將引起事件,並具備附加功能。安全

  只要您使用 Timer, ,則必須保持對它的引用。 與任何託管對象同樣 Timer 沒有引用時才進行垃圾收集。 這一事實, Timer 是仍活動不會阻止它正在收集。服務器

  當再也不須要一個計時器時,使用 Dispose 計時器持有方法來釋放資源。 請注意,回調可能發生後 Dispose() 已調用方法重載,由於計時器是按線程池線程來安排回調的執行。 您能夠使用 Dispose(WaitHandle) 方法重載來等待,直到全部回調都已都完成。
  執行由計時器的回調方法應可重入,由於它在調用 ThreadPool 線程。 回調可同時執行兩個線程池線程上的計時器間隔是否小於執行回調,所需的時間或者是否全部線程池線程都正在使用,而且回調被屢次排隊。線程

  具體示例以下:orm

        static void Main(string[] args)
        {
            var autoEvent = new AutoResetEvent(false);
            Timer t = new Timer(p => FlushData(), autoEvent, 0, 10000);// 第一個參數是:回調方法,表示要定時執行的方法,第二個參數是:回調方法要使用的信息的對象,或者爲空引用,第三個參數是:調用 callback 以前延遲的時間量(以毫秒爲單位),指定 Timeout.Infinite 以防止計時器開始計時。指定零 (0) 以當即啓動計時器。第四個參數是:定時的時間時隔,以毫秒爲單位
            autoEvent.WaitOne();
	}

  

	 static void FlushData()
        {
             Console.WriteLine("Helo World");
        }

 

參考資料:htm

 .Net FrameWork 官方文檔 對象

 Timer用法blog

相關文章
相關標籤/搜索