【发布时间】:2013-02-19 09:15:58
【问题描述】:
我有一个运行多个定时功能的 Windows 服务:
_timer = new Timer(1 * 60 * 1000); // every 1 minute
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
_timer.Start();
_fbtimer = new System.Timers.Timer(48 * 60 * 60 * 1000);
_fbtimer.Elapsed += new System.Timers.ElapsedEventHandler(fbtimer_Elapsed);
_fbtimer.Start();
//Weekley Snapshot
_ventimer = new System.Timers.Timer(2 * 60 * 1000);
_ventimer.Elapsed += new System.Timers.ElapsedEventHandler(ventimer_Elapsed);
_ventimer.Start();
//Weekly Activity
_tevtimer = new System.Timers.Timer(2 * 60 * 1000);
_tevtimer.Elapsed += new System.Timers.ElapsedEventHandler(tevtimer_Elapsed);
_tevtimer.Start();
如何将计时器设置为每周发生一次,或者更好地将其设置为每周一天的特定时间,而不使用 quatrz/windows 调度程序或太不同的方法。
补充:这就是我每天 10 点执行任务的方式
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//log.Info("Info - Check time");
DateTime startAt = DateTime.Today.AddHours(10);
if (_lastRun < startAt && DateTime.Now >= startAt)
{
_timer.Stop();
//Stuff
_lastRun = DateTime.Now;
_timer.Start();
}
}
【问题讨论】:
-
" 不使用 quatrz/windows 调度程序"。 坏主意。
-
好的任何建议最好/最简单的方法来实现石英在这种方法,因为我之前没有运气尝试过
-
如果您将
AddHours(10)更改为AddDays(7),您就有了自己问题的答案。 -
好的,谢谢,假设我添加 7 天 10 小时并在星期一启动服务,它将每周一运行 10 时钟
-
是的。我个人会定义一个变量
nextRun而不是lastRun,因此您可以指定下一次运行的时间,与您启动服务的时间无关。