实例介绍
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.Threading; /// <summary> /// 管理类 /// </summary> public class PaperManager { /// <summary> /// 定时器 /// </summary> private Timer iTimer; /// <summary> /// 启动时间 /// </summary> private TimeSpan dueTime; /// <summary> /// 方法调用间隔 /// </summary> private TimeSpan period; /// <summary> /// 委托 /// </summary> private TimerCallback timerDelegate; /// <summary> /// 静态实例 /// </summary> private static readonly PaperManager self = new PaperManager(); /// <summary> /// 构造函数 /// </summary> public PaperManager() { timerDelegate = new TimerCallback(CheckStatus); } /// <summary> /// /// </summary> /// <returns></returns> public static PaperManager getInstance() { return self; } /// <summary> /// 设置启动时间间隔 /// </summary> /// <param name="days">天</param> /// <param name="hours">小时</param> /// <param name="minutes">分钟</param> /// <param name="seconds">秒</param> /// <param name="milisecond">毫秒</param> public void setDueTime(int days, int hours, int minutes, int seconds, int milisecond) { dueTime = new TimeSpan(days, hours, minutes, seconds, milisecond); } /// <summary> /// 设置回调时间间隔 /// </summary> /// <param name="days">天</param> /// <param name="hours">小时</param> /// <param name="minutes">分钟</param> /// <param name="seconds">秒</param> /// <param name="milisecond">毫秒</param> public void setPeriod(int days, int hours, int minutes, int seconds, int milisecond) { period = new TimeSpan(days, hours, minutes, seconds, milisecond); } /// <summary> /// 开始 /// </summary> public void Start() { AutoResetEvent autoEvent = new AutoResetEvent(false); dueTime = TimeSpan.FromSeconds(0); period = TimeSpan.FromSeconds(10); iTimer = new Timer(timerDelegate, autoEvent, dueTime, period); autoEvent.WaitOne(5000, false); iTimer.Change(dueTime, period); } /// <summary> /// 停止 /// </summary> public void Stop() { iTimer.Dispose(); } /// <summary> /// 执行一次 /// </summary> public void ExcuteOneTime() { if (iTimer != null) { iTimer.Dispose(); } //如果 period 为零 (0) 或 -1 毫秒,而且 dueTime 为正,则只会调用一次 callback; //计时器的定期行为将被禁用,但通过使用 Change 方法可以重新启用该行为。 setDueTime(0, 0, 0, 0, 1); setPeriod(0, 0, 0, 0, -1); AutoResetEvent autoEvent = new AutoResetEvent(false); iTimer = new Timer(timerDelegate, autoEvent, dueTime, period); autoEvent.WaitOne(5000, false); iTimer.Change(dueTime, period); } /// <summary> /// 行为 /// </summary> /// <param name="nObject"></param> public void CheckStatus(object nObject) { AutoResetEvent autoEvent = (AutoResetEvent)nObject; if (ExcuteUpdate()) { autoEvent.Set(); } } /// <summary> /// 更新 /// </summary> /// <returns></returns> private bool ExcuteUpdate() { try { //应该从数据库获得Paper对象的集合,这里简略 //List<Paper> paperList = getPaperList(); List<Paper> paperList = new List<Paper>(); foreach (Paper item in paperList) { if (item.EndTime <= DateTime.Now) { if (item.Status == Paper.StatusOfNormal) { item.Status = Paper.StatusOfTerminate; } } } ////执行数据更新,这里省略 return true; } catch { return false; } } }
标签: Timer
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论