封装Timer
System.Timers.Timer,System.Timers.Timer在使用的过程中需要:
1、构造函数不同,构造函数可以什么事情也不做,也可以传入响应间隔时间:System.Timers.Timer timer = new System.Timers.Timer(10);
2、设置响应事件的响应函数:timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
3、调用 timer.Start()或者timer.Enabled = true来启动它, timer.Start()的内部原理还是设置timer.Enabled = true
4、调用 timer.Stop()或者timer.Enabled = false来停止引发Elapsed事件, timer.Stop()的内部原理还是设置timer.Enabled = false,最重要的是timer.Enabled = false后会取消线程池中当前等待队列中剩余任务的执行。
看起来还有点麻烦,那我们就尝试封装一个自己的Timer类,在内部实现Timer。代码如下:
public class MyTimer { private System.Timers.Timer timeOut = new System.Timers.Timer(); public delegate void Delegate_TimeOut(object tag); public event Delegate_TimeOut delegate_timeOut; private object tag; public MyTimer(double duration) { timeOut.Interval = duration; timeOut.Elapsed += new System.Timers.ElapsedEventHandler(timeOut_Elapsed); } public void Start(object o) { this.tag = o; timeOut.Enabled = true; timeOut.Start(); } public void Stop() { timeOut.Enabled = false; timeOut.Stop(); } ~MyTimer() { timeOut.Elapsed -= new System.Timers.ElapsedEventHandler(timeOut_Elapsed); timeOut.Close(); } private void timeOut_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //do what you want to do delegate_timeOut(tag); } }
使用:
MyTimer myTimer = new MyTimer(2000); myTimer.delegate_timeOut += new MyTimer.Delegate_TimeOut(overTime);//overTime 为具体实现
myTimer.Start(null);