封装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();
myTimer.delegate_timeOut += new MyTimer.Delegate_TimeOut(overTime);//overTime 为具体实现 myTimer.Start(null);
封装Timer的更多相关文章
- java Timer定时器管理类
1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...
- javascript编写的一个完整全方位轮播图效果
1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- react native中的聊天气泡以及timer封装成的发送验证码倒计时
今天看来情书写的文章,研究了一下大佬写的文章,自己做一点总结. 其实,今天我想把我近期遇到的坑都总结一下:1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以 ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
Quartz.NET是一个非常强大的作业调度框架,适用于各种定时执行的业务处理等,类似于WINDOWS自带的任务计划程序,其中运用Cron表达式来实现各种定时触发条件是我认为最为惊喜的地方. Quar ...
- 各种Js封装
获取ClassName元素 function getClass(classname,id){ if(document.getElementsByClassName){ if(id){ return $ ...
- GLUT的简洁OO封装
毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...
- 模拟CSS3 多组位移运动属性的框架封装
obj是将要运动的对象,json是运动完成时的位移结果. 封装要点: 1.定时器开关flag的定义要放在for in结构的外面,否则,每遍历一次,都会定义一个 新的flag 2.if(current ...
随机推荐
- (转载)javascript实现弹出对话框
(转载)http://xiezezhun.iteye.com/blog/335898 简单对话框 一般常用的是 alert prompt confirm三种对话框 JavaScript代码: < ...
- 跨浏览器读取XML
这里跨浏览器,但是只能读取字符串XML文档,可以通过Ajax方式load一个XML文档,将文件XML转变为字符串 // 跨浏览器返回XML DOM对象 function getXMLDOM(xmlSt ...
- js弹框处理
# -*- coding:utf-8 -*- """ js弹框处理 """ from selenium import webdriver d ...
- vimium快捷键列表
最近越来越懒了,不想拿手去碰鼠标,就想这样放在键盘上,在MacOSX下基本的操作也都能实现了,Xcode也没什么问题,现在就是有个地方十分不方便,就是浏览网页的问题,不管怎么样都是需要鼠标来浏览网页, ...
- 简单tableView的使用
UITableView是一个用于显示列表的视图,可以作为子视图镶嵌在主视图上,可以滑动,选取各种参数 定义: @interface ViewController : UIViewController& ...
- 客户端MapReduce提交到YARN过程
在Mapreduce v1中是使用JobClient来和JobTracker交互完成Job的提交,用户先创建一个Job,通过JobConf设置好参数,通过JobClient提交并监控Job的进展,在J ...
- NYOJ 14 贪心解题报告
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...
- Ubuntu下Android Studio安装、配置和使用
Ubuntu下使用Android Studio开发应用程序,首先需要安装该IDE. 情况1:Ubuntu下安装Android Studio 打开Terminal,执行下述指令: sudo apt-ad ...
- JSON 和 JSONP
本文转载:http://www.cnblogs.com/shanyou/archive/2009/12/13/1623163.html JSON 和 JSONP 浏览器安全模型规定,XMLHttpR ...
- PPT扁平化风格设计手册
钱文嘉:颜色选择,搭配 http://www.pptfans.cn/341917.html