说起定时,很多人都会使用计时器来做,事实上,在C#中使用时间来触发事件更加方便。当然使用计时器也能触发事件,事实上这篇文章的重点是对于C#事件的使用,只是加入了一点简单的实例。昨天收到公司要做个定时播放音乐的小程序,下面看看我怎么实现的吧。
首先声明几个需要的事件和委托。
public delegate void mytimer(); public event mytimer playmusic; public event mytimer stopmusic; public event mytimer shutdown;
然后在程序启动时注册事件并启动一条线程,用来计时,根据时间触发相应的事件,计时线程代码如下。
this.playmusic += callback_play; this.stopmusic += callback_stop; this.shutdown += callback_down; Thread mytherad = new Thread(timerp); mytherad.IsBackground = true; mytherad.Start(); public void timerp() { String Datestr = DateTime.Now.ToString("yyyy-MM-dd"); long timeStamp = timetemp(Datestr + " " + autodown); // 关机时间戳 long play1 = timetemp(Datestr + " 08:50:00"); // 第一次播放时间戳 long play2 = timetemp(Datestr + " 09:00:00"); // 第二次播放时间戳 long play3 = timetemp(Datestr + " 09:10:00"); // 第三次播放时间戳 long play4 = timetemp(Datestr + " 09:20:00"); // 第四次播放时间戳 long play1stop = timetemp(Datestr + " 08:55:00"); // 第一次停止时间戳 long play2stop = timetemp(Datestr + " 09:05:00"); // 第二次停止时间戳 long play3stop = timetemp(Datestr + " 09:15:00"); // 第三次停止时间戳 long play4stop = timetemp(Datestr + " 09:25:00"); // 第四次停止时间戳 System.Console.WriteLine(timeStamp); while(true){ TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0); long timestap1 = Convert.ToInt64(ts.TotalSeconds); System.Console.WriteLine(timestap1); if (timestap1 == timeStamp) { shutdown(); } if (timestap1 == play1 || timestap1 == play2 || timestap1 == play3 || timestap1 == play4) { playmusic(); } if (timestap1 == play1stop || timestap1 == play2stop || timestap1 == play3stop || timestap1 == play4stop) { stopmusic(); } Thread.Sleep(1000); } }
根据时间戳判断是否到了指定时间,到了就触发相应的事件,然后在事件中处理即可。
public void callback_play() { System.Console.WriteLine("播放音乐"); } public void callback_stop() { System.Console.WriteLine("停止播放音乐"); } public void callback_down() { System.Console.WriteLine("关机触发"); }
我写完了,是不是很简单。哈哈哈,还有个转换时间戳的,一起贴出来吧。
public long timetemp(String str) { DateTime dt; DateTimeFormatInfo dtFormat = new DateTimeFormatInfo(); dtFormat.ShortDatePattern = "yyyy-MM-dd hh:mm:ss"; dt = Convert.ToDateTime(str, dtFormat); System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(dt - startTime).TotalSeconds; // 相差秒数 return timeStamp; }
传入日期时间字符串即可返回对应的时间戳。
您可能感兴趣的文章
- Apache和Spring提供的StopWatch执行时间监视器 – _YourBatman的个人页面
- synchronized关键字的使用
- 多线程编程学习八(原子操作类).
- C#读写文本文件教程
- .net测试篇之测试神器Autofixture在几个复杂场景下的使用示例以及与Moq结合
- 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现
- 这可能是最简单实现自定义注解的文章了 – 老师好我叫王同学的个人空间
- Java 8原生API也可以开发响应式代码?
未经允许不得转载:杂烩网 » C#简单的定时任务写法
课后答案张九龄《望月怀远》阅读答案及全诗翻译赏析
望月怀远张九龄海上生明月,天涯共此时。情人怨遥夜,竟夕起相思。灭烛怜光满,披衣觉露滋。不堪盈手赠,还寝梦佳期。注释⑴怀远:怀念远方的亲人。⑵最前面两句:辽阔无边的大海上升起一轮明月,使人想起了远在天涯……
课后答案王安石《次韵唐公三首其三旅思》阅读答案
次韵唐公三首其三旅思王安石此身南北老,愁见问征途。地大蟠三楚,天低入五湖。看云心共远,步月影同孤。慷慨秋风起,悲歌不为鲈②。注:①张壤,字唐公,北宋嘉佑六年契丹国母生辰使,王安石友人。②《晋书&mid……
笔记心得各级干部学习执法为民心得体会
“各级干部都要牢固树立全心全意为人民服务的思想和真心实意对人民负责的精神,做到心里装着群众,凡事想着群众,工作依靠群众,一切为了群众。要坚持权为民所用,情为民所系,利为民所谋,为群众诚……
笔记心得寒假大学生社会实践心得体会
自从走进了大学,就业问题就似乎总是围绕在我们的身边,成了说不完的话题。在现今社会,招聘会上的大字报都总写着“有经验者优先”,可还在校园里面的我们这班学子社会经验又会拥有多少……
协议书济南市某美容院转让协议第2篇
__________美容院根据中华人民共和国国务院劳动法规和________市私营企业劳动管理实施办法,结合本美容院经营的具体所需今制订此劳动合同书。 双……
剧本劳模宣传短剧剧本《阿咪也想当劳模》
1、机械厂门卫处,日,外。 清早,机械厂班长李玉伟开着别克赛欧小汽车驶进厂区,门卫室内的保安一边按开电动门,一边朝李玉伟摆手。 李玉伟:(摇下车窗,笑着打招呼)小秦,早。 保安小秦:(笑着)……
教程灰雀说课稿
灰雀说课稿 灰雀说课稿(一): 《灰雀》说课稿 一、说教材 《灰雀》是义务教育课程标准实验教科书,小学语文第五册第二单元的一篇讲读课文。这篇课文记叙了列宁在莫斯科郊外养病期间爱护灰雀的故事。列……
课件“吴隐之字处默,濮阳鄄城人”阅读答案及原文
吴隐之字处默,濮阳鄄城人。美姿容,善谈论,博涉文史,以儒雅标名。弱冠而介立,有清操,虽儋石无储,不取非其道。事母孝谨,及其执丧,哀毁过礼。与太常韩康伯邻居,康伯母,贤明妇人也,每闻隐之哭声,辍餐投箸,……