第一種,多線程
直接實例化Timer類,設置時間間隔,到達時間後執行想要執行的事件。代碼示例:app
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Timers; namespace Timer { class Program { static void Main(string[] args) { // Create a new Timer with Interval set to 10 seconds. System.Timers.Timer aTimer = new System.Timers.Timer(10000); //實例化Timer類,設置間隔時間爲10000毫秒; aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); //到達時間的時候執行事件 // Only raise the event the first time Interval elapses. aTimer.AutoReset = true; //設置是執行一次(false)仍是一直執行(true); aTimer.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件; Console.WriteLine("Press \'q\' to quit the sample."); while (Console.Read() != 'q') ; } // Specify what you want to happen when the event is raised. private static void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("Hello World!"); } } }
第二種,ui
使用讓程序休眠的方法Thread.sleep()。 Thread.Sleep靜態方法,使當前線程掛起指定的時間。沒有多線程的話,程序只有一個主線程,就是使整個程序休眠。spa
程序首先建立了一個定時器,它將在建立1秒以後開始每隔1秒調用一次CheckStatus()方法,當調用5次之後,在CheckStatus()方法中修改了時間間隔爲2秒,而且指定在10秒後從新開始。當計數達到10次,調用Timer.Dispose()方法刪除了timer對象,主線程因而跳出循環,終止程序。線程
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ThreadExample { class TimerExampleState { public int counter = 0; public Timer tmr; } class Program { static void Main(string[] args) { TimerExampleState s = new TimerExampleState(); //建立代理對象TimerCallback,該代理將被定時調用 TimerCallback timerDelegate = new TimerCallback(CheckStatus); //建立一個時間間隔爲1s的定時器 Timer timer = new Timer(timerDelegate, s, 1000, 1000); // 第一個參數:指定了TimerCallback 委託,表示要執行的方法; // 第二個參數:一個包含回調方法要使用的信息的對象,或者爲空引用; // 第三個參數:延遲時間——計時開始的時刻距如今的時間,單位是毫秒,指定爲「0」表示//當即啓動計時器; // 第四個參數:定時器的時間間隔——計時開始之後,每隔這麼長的一段時間,TimerCallback所表明的方法將被調用一次,單位也是毫秒。指定 Timeout.Infinite 能夠禁用按期終止。 s.tmr = timer; //主線程停下來等待Timer對象的終止 while (s.tmr != null) Thread.Sleep(0); Console.WriteLine("Timer example done."); Console.ReadLine(); } //下面是被定時調用的方法 static void CheckStatus(Object state) { TimerExampleState s = (TimerExampleState)state; s.counter++; Console.WriteLine("{0} Checking Status {1}.", DateTime.Now.TimeOfDay, s.counter); if (s.counter == 5) { //使用Change方法改變了時間間隔 (s.tmr).Change(10000, 2000); Console.WriteLine("changed"); } if (s.counter == 10) { Console.WriteLine("disposing of timer"); s.tmr.Dispose(); s.tmr = null; } } } }
運行的結果以下圖:代理