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。代码如下:

  1. public class MyTimer
  2. {
  3. private System.Timers.Timer timeOut = new System.Timers.Timer();
  4. public delegate void Delegate_TimeOut(object tag);
  5. public event Delegate_TimeOut delegate_timeOut;
  6. private object tag;
  7.  
  8. public MyTimer(double duration)
  9. {
  10. timeOut.Interval = duration;
  11. timeOut.Elapsed += new System.Timers.ElapsedEventHandler(timeOut_Elapsed);
  12. }
  13.  
  14. public void Start(object o)
  15. {
  16. this.tag = o;
  17. timeOut.Enabled = true;
  18. timeOut.Start();
  19. }
  20.  
  21. public void Stop()
  22. {
  23. timeOut.Enabled = false;
  24. timeOut.Stop();
  25. }
  26.  
  27. ~MyTimer()
  28. {
  29. timeOut.Elapsed -= new System.Timers.ElapsedEventHandler(timeOut_Elapsed);
  30. timeOut.Close();
  31. }
  32.  
  33. private void timeOut_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  34. {
  35. //do what you want to do
  36. delegate_timeOut(tag);
  37. }
  38. }

使用:

  1. MyTimer myTimer = new MyTimer();
  2. myTimer.delegate_timeOut += new MyTimer.Delegate_TimeOut(overTime);//overTime 为具体实现
  3.  
  4. myTimer.Start(null);
  1.  

封装Timer的更多相关文章

  1. java Timer定时器管理类

    1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...

  2. javascript编写的一个完整全方位轮播图效果

    1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  3. react native中的聊天气泡以及timer封装成的发送验证码倒计时

    今天看来情书写的文章,研究了一下大佬写的文章,自己做一点总结. 其实,今天我想把我近期遇到的坑都总结一下:1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以 ...

  4. Ajax实现原理,代码封装

    都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...

  5. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  6. 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能

    Quartz.NET是一个非常强大的作业调度框架,适用于各种定时执行的业务处理等,类似于WINDOWS自带的任务计划程序,其中运用Cron表达式来实现各种定时触发条件是我认为最为惊喜的地方. Quar ...

  7. 各种Js封装

    获取ClassName元素 function getClass(classname,id){ if(document.getElementsByClassName){ if(id){ return $ ...

  8. GLUT的简洁OO封装

    毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...

  9. 模拟CSS3 多组位移运动属性的框架封装

    obj是将要运动的对象,json是运动完成时的位移结果. 封装要点: 1.定时器开关flag的定义要放在for in结构的外面,否则,每遍历一次,都会定义一个 新的flag 2.if(current ...

随机推荐

  1. 在ASP.NET MVC中对手机号码的验证

    在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码. public class Customer { [Required(ErrorMessage = " ...

  2. (转载)MySQL关键字GROUP BY的使用

    例子: mysql> select * from employee; +------+------+-------+------+-------+----------+ | num | d_id ...

  3. 用Objective-C的Category特性添加类的属性

    http://www.cnblogs.com/wupher/archive/2013/01/05/2845338.html Category是Objective-C中常用的语法特性,通过它可以很方便的 ...

  4. ACM1230_火星A+B(进位的运算)

    //只要看懂火星A+B的进位关系就好了 #include<stdio.h> ]={,,,,,,,,,,,,,,,,,,,,,,,,,}; int main() { ],b[],sum[]; ...

  5. SRM 409(1-250pt, 1-500pt)

    DIV1 250pt 题意:称string s是vector<string> words的ordered superstring,如果它满足:存在一个数列{x0, x1, x2...xm} ...

  6. ASP.NET datable导出excel

    本文转载:http://www.cnblogs.com/chwkai/archive/2005/10/08/250426.html 不错的文章:http://www.cnblogs.com/lzhp/ ...

  7. MediaInfo源代码分析 4:Inform()函数

    我们来看一下MediaInfo中的Inform()函数的内部调用过程 首先Inform()函数封装了MediaInfo_Internal类中的Inform()函数 //返回文件信息 String Me ...

  8. AndroidStudio 快捷键使用

    经常使用快捷键使用搜集 1. Ctrl+D: 集合了复制和粘贴两个操作,假设有选中的部分就复制选中的部分.并在选中部分的后面粘贴出来,假设没有选中的部分.就复制光标所在的行.并在此行的以下粘贴出来. ...

  9. MapReduce分析明星微博数据

    互联网时代的到来,使得名人的形象变得更加鲜活,也拉近了明星和粉丝之间的距离.歌星.影星.体育明星.作家等名人通过互联网能够轻易实现和粉丝的互动,赚钱也变得前所未有的简单.同时,互联网的飞速发展本身也造 ...

  10. Java 理论与实践: 非阻塞算法简介--转载

    在不只一个线程访问一个互斥的变量时,所有线程都必须使用同步,否则就可能会发生一些非常糟糕的事情.Java 语言中主要的同步手段就是synchronized 关键字(也称为内在锁),它强制实行互斥,确保 ...