封装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);
 

 

 

posted on 2013-12-14 22:57  风扬sky  阅读(492)  评论(0编辑  收藏  举报

导航