using System;
using System.Threading;
class TimerExampleState
{
public int counter = 0;
public Timer tmr;
}
class App
{
public static void Main()
{
TimerExampleState s = new TimerExampleState();
//創建代理對象TimerCallback,該代理將被定時調用
TimerCallback timerDelegate = new TimerCallback(CheckStatus);
//創建一個時間間隔為1s的定時器
Timer timer = new Timer(timerDelegate, s,1000, 1000);
s.tmr = timer;
//主線程停下來等待Timer對象的終止
while(s.tmr != null)
Thread.Sleep(0);
Console.WriteLine("Timer example done.");
Console.ReadLine();
}
file://下面是被定時調用的方法
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)
{
file://使用Change方法改變了時間間隔
(s.tmr).Change(10000,2000);
Console.WriteLine("changed...");
}
if(s.counter == 10)
{
Console.WriteLine("disposing of timer...");
s.tmr.Dispose();
s.tmr = null;
}
}
}
程序首先創建了一個定時器,它將在創建1秒之後開始每隔1秒調用一次CheckStatus()方法,當調用5次以後,在CheckStatus()方法中修改了時間間隔為2秒,並且指定在10秒後重新開始。當計數達到10次,調用Timer.Dispose()方法刪除了timer對象,主線程於是跳出循環,終止程序。程序執行的結果如下:
上面就是對ThreadPool和Timer兩個類的簡單介紹,充分利用系統提供的功能,可以為我們省去很多時間和精力——特別是對很容易出錯的多線程程序。同時我們也可以看到.Net Framework強大的內置對象,這些將對我們的編程帶來莫大的方便。