博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定时器的使用说明
阅读量:6071 次
发布时间:2019-06-20

本文共 1778 字,大约阅读时间需要 5 分钟。

Net框架下有多种定时器,下面是其中两种使用的说明

一、system.timers.timer

1、普通使用,每隔一段时间执行一次,缺点:如果执行任务时间大于间隔时间,会造成多次启动定时器

private void Start()

{

System.Timers.Timer oTimer = new System.Timers.Timer(60 * 60 * 1000);

oTimer.Elapsed += new ElapsedEventHandler(AmWork);
oTimer.AutoReset = true;
oTimer.Enabled = true;

}

public void AmWork(object source, ElapsedEventArgs e)

{
Console.WriteLine("I'm working.");
}

2、防止多次启动使用,执行的时候,停止定时器,执行完毕之后,开启定时器

public void Start()

{
System.Timers.Timer oTimer = new System.Timers.Timer(2*1000);
Action<object, System.Timers.ElapsedEventArgs> amWork = (sender, e) =>
{
oTimer.Stop();
Console.WriteLine("working:" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
System.Threading.Thread.Sleep(5000);
oTimer.Start();
};
oTimer.Elapsed += new System.Timers.ElapsedEventHandler(amWork);
oTimer.AutoReset = true;
oTimer.Enabled = true;

}

二、System.Threading.Timer定时器:不但可以设置间隔时间,也可以设置第一次执行间隔时间,有助于程序启动时,自定义第一次执行间隔时间

注意:只要在使用Timer,就必须保留对它的引用,可以理解为“timer需要定义为类的成员变量,而不是某方法的局部变量,否则会被回收”,但如果使用类没有实例化静态变量,也会导致回收掉

1、普通使用

System.Threading.Timer timer = null;

Action<object> timerHandler = state =>
{
Console.WriteLine("working:" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
};

timer = new System.Threading.Timer(new System.Threading.TimerCallback(timerHandler), null, 1000, 2000);

2、防止多次启动使用,但使用了Change之后,change执行间隔时间,必须使用第一次执行时间,好像有点问题

System.Threading.Timer timer = null;

Action<object> timerHandler = state =>
{
timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); //可防止上次任务没有执行完毕,重启计时器
Console.WriteLine("working:" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
timer.Change(3000, 3000);
};

timer = new System.Threading.Timer(new System.Threading.TimerCallback(timerHandler), null, 1000, 1000);

转载于:https://www.cnblogs.com/honzhez/p/5643767.html

你可能感兴趣的文章
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>
ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
查看>>
lintcode:next permutation下一个排列
查看>>
python 递归
查看>>
一个想法(续二):换个角度思考如何解决IT企业招聘难的问题!
查看>>
tomcat指定配置文件路径方法
查看>>