天天看点

计时器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中,且必须用于窗口。略。

博客园大道至简

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

转载请注明:博客园

继续阅读