1. ホーム
  2. c#

[解決済み] C#のWindowsサービスが毎日タスクを実行するようにスケジュールするにはどうすればよいですか?

2023-05-10 23:58:40

質問

私は C# (.NET 1.1) で書かれたサービスを持っており、毎晩真夜中にいくつかのクリーンアップ動作を実行させたいと思っています。私はすべてのコードがサービス内に含まれていることを維持しなければならないので、これを達成するための最も簡単な方法は何ですか?これを達成する最も簡単な方法は何ですか? Thread.Sleep() を使用して、時間がロールオーバーするのをチェックしますか?

どのように解決するのですか?

Thread.Sleep()は使用しません。スケジュールされたタスク (他の人が言及したように) を使用するか、サービス内でタイマーをセットアップして、定期的に (たとえば 10 分ごとに) 起動し、最後に実行してから日付が変更されたかどうかをチェックします。

private Timer _timer;
private DateTime _lastRun = DateTime.Now.AddDays(-1);

protected override void OnStart(string[] args)
{
    _timer = new Timer(10 * 60 * 1000); // every 10 minutes
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    _timer.Start();
    //...
}


private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    // ignore the time, just compare the date
    if (_lastRun.Date < DateTime.Now.Date)
    {
        // stop the timer while we are running the cleanup task
        _timer.Stop();
        //
        // do cleanup stuff
        //
        _lastRun = DateTime.Now;
        _timer.Start();
    }
}