计时器用于到指定时间调用委托(或说执行方法),或定时调用委托。
(一) Timer类
名字空间:System.Threading
它主要提供在指定时间间隔内循环执行方法。
它的构造方法有多个,以其中一个为例:
public Timer(TimerCallback callback,Object state,int dueTime,int period)
四个参数分别表示:
要执行的方法;包括回调方法中要使用的信息的对象;在调用执行的方法之前的延迟时间(毫秒);调用回调方法的时间间隔(毫秒)
TimerCallback的定义为:
public delegate void TimerCallback(Object state)
示例:
{
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表达式或匿名委托来定义,如下:
{
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 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 ;
Console.Read();
}
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中,且必须用于窗口。略。