原料:
System.Timers.Timer():通過.NET Thread Pool實現的,輕量,計時精確,對應用程序、消息沒有特別的要求;缺點是不支持直接的拖放,需要手工編碼。
Timer的主要屬性:
1、Interval:引發(fā)Elapsed事件的間隔;
2、Elapsed:達到間隔發(fā)生的事件;
3、Enabled:指示Timer是否應引發(fā)Elapsed事件;
設計:
一、TaskBase,任務基類
1、字段:
a、TimeMode,任務類型分為周期型和時刻型;
b、LastStartTime
2、屬性:
a、NextStartTime,只讀屬性
if (this.TimeMode == 0) { if (this.LastStartTime == DateTime.MinValue) { return DateTime.MinValue; } return this.LastStartTime.AddSeconds((double)this.MinPeriod); } if (this.LastStartTime == DateTime.MinValue) { return this.TheFixedNextStartTime; } return this.LastStartTime.AddDays(1.0).Date.AddHours((double)this.Hour).AddMinutes((double)this.Minute);
b、TheFixedNextStartTime,只讀屬性
if (this._theFixedNextStartTime == DateTime.MinValue) { this._theFixedNextStartTime = DateTime.Today.AddHours((double)this.Hour).AddMinutes((double)this.Minute); if (((SystemStartTime.Hour * 100) + SystemStartTime.Minute) > ((this.Hour * 100) + this.Minute)) { this._theFixedNextStartTime = this._theFixedNextStartTime.AddDays(1.0); } } return this._theFixedNextStartTime;
3、方法:
1、Execute:任務的具體執(zhí)行
2、Run:任務運行
this.LastStartTime = DateTime.Now;
this.Execute();
二、TaskMonitor:任務監(jiān)控
1、方法
a、Execute:Timer.Elapsed事件
if (TimeMode == 1) { flag = DateTime.Now >= base2.NextStartTime; } else { flag = ((base2.TickCount == 0) && (base2.LastStartTime == DateTime.MinValue)); if (!flag) {//定時器的運行間隔和任務運行間隔的比較 base2.TickCount += CheckPeriod; flag = base2.TickCount >= base2.MinPeriod; } if (flag) { base2.TickCount = 0; } } if (flag) Thread.RunMethod(new ThreadStart(base2.Run));
新聞熱點
疑難解答