c#定时器使用示例详解
在c#里关于定时器类就有3个
1.定义在system.windows.forms里
2.定义在system.threading.timer类里
3.定义在system.timers.timer类里
system.windows.forms.timer是应用于winform中的,它是通过windows消息机制实现的,类似于vb或delphi中的timer控件,内部使用api settimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,console application(控制台应用程序)无法使用。
system.timers.timer和system.threading.timer非常类似,它们是通过.net thread pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。system.timers.timer还可以应用于winform,完全取代上面的timer控件。它们的缺点是不支持直接的拖放,需要手工编码。
例1:
使用system.timers.timer类
system.timers.timer t = new system.timers.timer(10000);//实例化timer类,设置间隔时间为10000毫秒;
t.elapsed += new system.timers.elapsedeventhandler(theout);//到达时间的时候执行事件;
t.autoreset = true;//设置是执行一次(false)还是一直执行(true);
t.enabled = true;//是否执行system.timers.timer.elapsed事件;
public void theout(object source, system.timers.elapsedeventargs e)
{
messagebox.show("ok!");
}
例2:system.threading.timer类的timercallback 委托
system.threading.timer 是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高。
只要在使用 timer,就必须保留对它的引用。对于任何托管对象,如果没有对 timer 的引用,计时器会被垃圾回收。即使 timer 仍处在活动状态,也会被回收。当不再需要计时器时,请使用 dispose 方法释放计时器持有的资源。
使用 timercallback 委托指定希望 timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。此方法不在创建计时器的线程中执行,而是在系统提供的线程池线程中执行。
创建计时器时,可以指定在第一次执行方法之前等待的时间量(截止时间)以及此后的执行期间等待的时间量(时间周期)。可以使用 change 方法更改这些值或禁用计时器。
demo application:
应用场景:在windows form程序自动执行某项工作后,希望其windows form能够自动关闭。
代码设计:
(1)首先声明timer变量:private system.threading.timer timerclose;
(2)在上述自动执行代码后面添加如下timer实例化代码:
// create a timer thread and start it
timerclose = new system.threading.timer(new timercallback(timercall), this, 5000, 0);
timer构造函数参数说明:
callback:一个 timercallback 委托,表示要执行的方法。
state:一个包含回调方法要使用的信息的对象,或者为空引用(visual basic 中为 nothing)。
duetime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 timeout.infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
period:调用 callback 的时间间隔(以毫秒为单位)。指定 timeout.infinite 可以禁用定期终止。
(3)定义timercallback委托要执行的方法:
private void timercall(object obj)
{
timerclose.dispose();
this.close();
}
当然,除了使用上述system.threading.timer类的timercallback 委托机制外,应该还有很多其他的办法。另外,这里只是demo了timercallback委托的简单应用。