原料:
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));
