3

私はWindowsサービスを書きたいです。ただし、特定の時間に実行する必要があります。たとえば、私のサービスは 5 分ごとにメールを送信する必要があります。

private Timer _timer;
private DateTime _lastRun = DateTime.Now;

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


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

サービスから 5 分ごとにメールが届くようにします。

4

8 に答える 8

5

さて、Windowsサービスとスケジュールされたタスクについて説明する別の質問も見ました。したがって、それ以外のことを確認したい場合があります。これは、役立つ可能性のある2つの同様の質問です。

ここにもいくつかの素晴らしいリンクがあります:

于 2012-07-16T08:56:25.243 に答える
2

Quartz.NETを参照するか、「Windows タスク スケジューリング」を検索してください。

最初のアプローチはプログラムによるもので、後者は構成です。

于 2012-07-16T08:56:25.307 に答える
1

設定した間隔で必要なことを行うタイマーをサービスに追加してみませんか?

于 2012-07-16T08:54:11.257 に答える
1

この記事では、Windows サービスを作成する方法について説明しますhttp://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx

特定の時間に実行するには、スケジュールジョブを設定できます

于 2012-07-16T08:55:09.360 に答える
1

サービスでQuartz.netのようなものを使用したい場合があります。その後、cron 式を使用して、サービス内で「ジョブ」をスケジュールできます。

于 2012-07-16T08:56:13.523 に答える
1

あなたのコードは良さそうに見えますが、最初に OnStart 中に timer.start() を呼び出しましたか?

于 2012-07-16T08:56:19.723 に答える
1

タイマーで操作を行う必要がある場合、2 つの選択肢があります。

  1. Windows サービスを作成し、ある種のスケジューリングを実装します。これは複雑になる可能性があるため、すでに解決済みの問題を解決するために多くの時間を費やす可能性があることを覚悟しておいてください。
  2. アプリケーションを呼び出す代わりに、スケジュールされたタスクをセットアップできます。

それはすべて、あなたが本当に必要とするコントロールの量に依存します。

于 2012-07-16T08:56:43.157 に答える
0

上記の機能については、コンソール アプリケーションと Windows スケジューラを組み合わせて使用​​できます。

exe を 5 分ごとに実行するようにスケジュールします。あなたのexeはあなたに電子メールを送って停止します。Windows サービスを通じて達成したい具体的なことはありますか?

于 2012-07-16T10:55:09.590 に答える