1

我有一个运行多个定时功能的 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();
     }
}
4

1 回答 1

3

不使用 quatrz/windows 调度程序或太不同的方法。

为什么要重新发明轮子,糟糕?无论如何,每周计时器不会有多大好处。如果您将计时器编码为等待一周,并且机器在一周中途重新启动以进行更新怎么办?计时器将再次开始等待一周。

你最好让它以较小的间隔运行,并检查每次是否该运行你想要的方法。这样,您可以预先计算“事件时间”并每次检查它。

于 2013-02-19T09:21:26.817 回答