我通常用的timer都是每隔一段时间去执行,如果想指定时刻定时怎么办?
又或者我想每天3点,5点执行任务,每周1到周5执行任务,周六周日休息,又怎么办?
查询了一些资料,大约有4类方法:
1. 轮询制度
思路是仍然设定timer,比如1分钟,每次启动定时任务后,再去判断有没有到指定时间。
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = 60000; //执行间隔时间,单位为毫秒; 这里实际间隔为1分钟
timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(test);
//Console.Readkey()保持Console窗口不关闭,否则,该程序执行后一闪就关闭,不会等1分钟的时间。
Console.ReadKey();
}
private static void test(object source, ElapsedEventArgs e)
{
//指定的每天10:30分执行事件。这里需要注意的是,由于是指定到特定分钟执行事件
//因此,timer.Inverval的时间间隔最长不得超过1分钟,否则,长于1分钟的时间间隔有可能会错过10:30分这个时间节点,从而导致无法触发该事件
if (DateTime.Now.Hour == 1