原料:
System.Timers.Timer():通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求;缺点是不支持直接的拖放,需要手工编码。
Timer的主要属性:
1、Interval:引发Elapsed事件的间隔;
2、Elapsed:达到间隔发生的事件;
3、Enabled:指示Timer是否应引发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:任务的具体执行
2、Run:任务运行
this.LastStartTime = DateTime.Now;
this.Execute();
二、TaskMonitor:任务监控
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));
|
请发表评论