天天看點

計時器Timer介紹

計時器用于到指定時間調用委托(或說執行方法),或定時調用委托。

(一)   Timer類

名字空間:System.Threading

它主要提供在指定時間間隔内循環執行方法。

它的構造方法有多個,以其中一個為例:

public Timer(TimerCallback callback,Object state,int dueTime,int period)

四個參數分别表示:

要執行的方法;包括回調方法中要使用的資訊的對象;在調用執行的方法之前的延遲時間(毫秒);調用回調方法的時間間隔(毫秒)

TimerCallback的定義為:

public delegate void TimerCallback(Object state)

示例:

static void Main(string[] args)  

{  

    int k = 19; 

    Timer timer1 = new Timer(new TimerCallback(PrintMessage), k, 2000, 5000); 

    Console.Read();  

static void PrintMessage(object objState) 

    Console.WriteLine("ok1" + " " + objState.ToString());  

}  

設定2000毫秒後開始調用執行方法,每5000毫秒執行一次,并把k傳遞到執行方法(callback委托)

說明:2000毫秒後首次執行一次回調方法,然後每5000毫秒後再執行。

回調委托類型已經給出,在使用時可以Action委托或lambda表達式或匿名委托來定義,如下:

Action<object> ffun = delegate(object o)

{

    Console.WriteLine("ok3"+" "+o.ToString());

};

Timer timer2 = new Timer(new TimerCallback(q => Console.WriteLine("ok2" + " " + q.ToString())), k, 2000, 5000);

Timer timer3 = new Timer(new TimerCallback(ffun), k, 2000, 5000);

如果終止計時器,可以使用public void Dispose()方法

例如:設定定時器,2秒鐘後開始,每2秒調用一次,然後在調用5次(首次除外)後釋放計時器。

static int k = 1;

static Timer timer1;

static void Main(string[] args)

    timer1 = new Timer(new TimerCallback(PrintMessage), k, 2000, 2000);

    Console.Read();

static void PrintMessage(object objState)

{    

    Console.WriteLine("ok1" + " " + k.ToString());

    if (k > 5) timer1.Dispose();

    k++;

}

(二)   System.Timers.Timer類

在應用程式中生成定時事件。它有一個屬性:AutoReset

public bool AutoReset { get; set; }

用于設定每次指定的間隔結束時引發 Elapsed 事件,還是僅在指定的間隔第一次結束後引發該事件。

重要成員說明:

Interval:設定時間間隔,機關毫秒

Enabled:是否引發Elapsed事件

Elapsed:事件

public event ElapsedEventHandler Elapsed

其中事件類型:

public delegate void ElapsedEventHandler(Object sender,ElapsedEventArgs e)

sender為Timer,eventargs的重要屬性為:public DateTime SignalTime { get; }

用于觸發計時事件的時間。

{   

    System.Timers.Timer timer1 = new System.Timers.Timer();

    timer1.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);

    timer1.Interval = 2001;

    timer1.Enabled = true;

    timer1.AutoReset = true; 

static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)

    System.Timers.Timer tempTimer = source as System.Timers.Timer;

    Console.WriteLine(tempTimer.Interval);

    Console.WriteLine(e.SignalTime);

列印内容略。

(三)   System.Windows.Forms.Timer

用在winform中,且必須用于視窗。略。

部落格園大道至簡

http://www.cnblogs.com/jams742003/

轉載請注明:部落格園

繼續閱讀