C#多線程 定時重復調用異步線程即System.Threading.Timer類使用小例


1.System.Threading.Timer計時器提供了一種重復調用異步線程的方法。.Net BCL中有多個Timer類,如用於Windows應用程序的System.Windows.Forms.Timer類,如可以運行在用戶接口線程或工作線程上的System.Timers.Timer類。它們是很不一樣的,這里要講的System.Threading.Timer類是一種定時調用某個異步線程的類。每次計時器到設定的時間,系統就去線程池中開啟一個線程運行提供的回調方法。

2.調用這個Timer類的重復運行異步線程的方法很簡單: 

Timer myTimer = new Timer(TimerCallback callback, object state, uint dueTime, uint period);

上述方法中的參數,dueTime是首次調用異步線程前的等待時間,為整毫秒數,如2000,表示2秒后第一次調用;

period是兩次調用之間的時間間隔,為整毫秒數,如1000,表示每隔1秒調用一次(即發起一個異步線程,新發起的異步線程不會影響之前發起的線程,所有發起的線程都持續執行,如在下面例子中,直到用戶關閉程序所有線程才結束運行。);

state可以是null或者每次調用異步線程時要傳入的對象的引用;

callback是一個傳入一個object類型的參數,返回值是void的委托類型的方法,由用戶自定義,下面有例子。

3.程序運行結果(控制台程序)

4.代碼

[csharp]  view plain  copy
 
  1. using System;  
  2. using System.Threading;  
  3.   
  4. namespace 用Timer定時重復運行異步線程  
  5. {  
  6.  class Program  
  7.  {  
  8.   int TimesCalled = 0;  
  9.   
  10.   void Display(object state)  
  11.   {  
  12.    Console.WriteLine("{0} {1} keep running.",(string)state, ++TimesCalled);             
  13.   }  
  14.   
  15.   static void Main()  
  16.   {  
  17.    Program p = new Program();  
  18.    Timer myTimer = new Timer(p.Display,"Processing timer event", 2000, 1000);//2秒后第一次調用,每1秒調用一次  
  19.    //Timer myTimer1 = new Timer(p.Display, "Processing timer event", Timeout.Infinite, 1000);//永遠不會被調用  
  20.    //Timer myTimer2 = new Timer(p.Display, "Processing timer event", 2000, Timeout.Infinite);//2秒后第一次調用,之后再不調用  
  21.    Console.WriteLine("Timer started.");  
  22.    Console.ReadLine();  
  23.   }  
  24.  }  
  25. }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM