c#定时执行程序代码
在一般的项目中我们很少用到c#实现每隔规定时间自动执行程序代码,但是如果你经历的项目多,或者应用程序做的比较多的话,c#实现每隔规定时间自动执行程序代码就用的比较多。像玩网游做挂机定时发布广告这样的项目中就用到了c#实现每隔规定时间自动执行程序代码。
在实践应用中我们可以用三种方法来实现。
方法一:调用Thread线程执行方法,在执行方法中实现死循环,在每个循环Sleep里设定时间
Thread thread25yi = new Thread(new ThreadStart(obj.MethodTimer1)); thread25yi.Start(); void MethodTimer1() { while (true) { Console.WriteLine(DateTime.Now.ToString() + "_" + thread25yi.CurrentThread.ManagedThreadId.ToString()); thread25yi.CurrentThread.Join(100);//阻止设定时间 } }
方法二:使用System.Timers.Timer类
System.Timers.Timer t25yi = new System.Timers.Timer(100);//实例化Timer类,设置时间间隔为100毫秒 t25yi.Elapsed += new System.Timers.ElapsedEventHandler(obj.MethodTimer2);//当到达时间的时候执行MethodTimer2事件 t25yi.AutoReset = true;//false是执行一次,true是一直执行 t25yi.Enabled = true;//设置是否执行System.Timers.Timer.Elapsed事件 while (true) { Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString()); Thread.Sleep(100); } void MethodTimer2(object source, System.Timers.ElapsedEventArgs e) { Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString()); }
方法三:使用System.Threading.Timer
System.Threading.Timer threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(obj.MethodTimer3), null, 0, 100); while (true) { Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString()); Thread.Sleep(100); } void MethodTimer3(Object state) { Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString()); }
Timer构造函数参数说明:
Callback是一个 TimerCallback 委托,表示要执行的方法。
State是一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
dueTime是调用 callback 之前延迟的时间量(以毫秒为单位),指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
Period是调用 callback 的时间间隔(以毫秒为单位),指定 Timeout.Infinite 可以禁用定期终止。
上述方法中用timer有一个弊端,就是当timer间隔时间内,事件没执行完,timer就会新建一个线程,从头开始执行这个事件,而上一个线程继续执行,这样就会出现,系统中线程n多,说不定一会儿系统的资源就耗尽了。
猜您可能还喜欢
- 完美解决iis下JWplayer提示Error loading media: File could not be played错误(3301)
- asp.net mvc+jquery easyui开发基础(一)模块首页及增加、修改、删除模块实现(2459)
- .Net Mvc中使用Jquery EasyUI控件讲解(一)表格控件datagrid使用介绍(2202)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(七)权限管理模块之系统菜单动态生成(2180)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(三)登录模块开发(2086)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(六)权限管理模块之初始数据准备(1824)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(八)权限管理模块之权限管理实现(1774)
- Jquery ajax访问asp.net web api跨域问题解决方案(1552)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(五)后台模板html页面集成到项目中(1217)
- .Net Mvc中使用Jquery EasyUI控件讲解(二)树形控件tree使用介绍(1203)
评论列表
发表评论
文章分类
文章归档
阅读排行
- 1. Windows Server 2008 R2永久激活及Chew-WGA v0.9下载(11484)
- 2.Visual Studio 2017中安装visualSVN及使用详解(4317)
- 3.完美解决iis下JWplayer提示Error loading media: File could not be played错误(3301)
- 4.asp.net mvc+jquery easyui开发基础(一)模块首页及增加、修改、删除模块实现(2459)
- 5..Net Mvc中使用Jquery EasyUI控件讲解(一)表格控件datagrid使用介绍(2202)
- 6.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(七)权限管理模块之系统菜单动态生成(2180)
- 7.Android avax.net.ssl.SSLPeerUnverifiedException: No peer certificate 解决方法(httpClient支持HTTPS的访问方式)(2133)
- 8.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(三)登录模块开发(2086)
- 9. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(六)权限管理模块之初始数据准备(1824)
- 10.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(八)权限管理模块之权限管理实现(1774)