zoukankan      html  css  js  c++  java
  • 封装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);
     
  • 相关阅读:
    git的使用(一)
    数据结构与算法 —— 二叉树 01
    数据结构与算法 —— 二叉树
    数据结构与算法 —— 链表linked list(06)
    数据结构与算法 —— 链表linked list(05)
    数据结构与算法 —— 链表linked list(04)
    数据结构与算法 —— 链表linked list(03)
    数据结构与算法 —— 链表linked list(02)
    Install sheild设置了Blue皮肤,但是有的窗口更改不了问题
    C# 进制转换
  • 原文地址:https://www.cnblogs.com/skysimblog/p/3474808.html
Copyright © 2011-2022 走看看