windows service timer set to weekly

2019-08-05 09:16发布

I have a windows service running with several timed functions:

   _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();

How do i set the timer to occur say once a week, or even better set it to a specific time on one day a week, without using quatrz/windows scheduler or a too different method.

Addition: this is how i am running a task everyday at 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();
     }
}

标签: c# service timer
1条回答
Deceive 欺骗
2楼-- · 2019-08-05 09:41

without using quatrz/windows scheduler or a too different method.

Why reinvent the wheel, poorly? Anyway a weekly timer won't do much good. What if you code the timer to wait a week, and the machine reboots halfway the week for updates? The timer will start waiting a week again.

You'd better let it run at a small interval and check each time whether it's time to run the method you want. This way you can pre-calculate the 'event time' and check for it each time.

查看更多
登录 后发表回答