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

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();
     }
}
4

1 に答える 1

3

quatrz/windows スケジューラーやあまりにも異なる方法を使用せずに。

なぜ車輪を再発明するのですか?とにかく、毎週のタイマーはあまり役に立ちません。タイマーを 1 週間待機するようにコーディングし、マシンが更新のために週の途中で再起動したらどうなるでしょうか。タイマーは再び 1 週間待機し始めます。

短い間隔で実行し、必要なメソッドを実行する時間であるかどうかを毎回確認することをお勧めします。このようにして、「イベント時間」を事前に計算し、毎回確認できます。

于 2013-02-19T09:21:26.817 に答える