• 封装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);
     
  • 相关阅读:
    jquery+ajax+ashx。ashx的使用方法
    如何在ashx页面获取Session值
    模式DIV。
    .net 中文传参
    5分钟无操作,退出,操作方法,关闭页面
    SQL Server DATEDIFF() 函数(SQL计算时间差)
    Sql server 事务的两种用法
    正则表达式相关
    jQuery AJAX实现调用页面后台方法。调用ashx方法
    时间差(类.精确到秒).net中实现Datediff类C#
  • 原文地址:https://www.cnblogs.com/skysimblog/p/3474808.html
Copyright © 2020-2023  润新知