0

start メソッドでタイマーを作成し、タイマーをトリガーしてすぐに実行する Windows サービスがあります。タイマーは長時間実行されるタスクであるため、services.msc の起動時のサービスがエラーとして検出されます。以下のタイマーは別のスレッドで実行され、サービスはすぐに開始されるはずだと思いましたか?

下の行を削除すると正常に動作しますが、サービスが開始されるとサービスがトリガーされます。

_timer_Elapsed(null, null);

この行を削除すると問題は解決しますが、これが必要です:

protected override void OnStart(string[] args)
{
    _timer = new System.Timers.Timer();
    _timer.AutoReset = false;
    _timer.Interval = (Convert.ToInt32(ConfigurationManager.AppSettings["CheckInterval"]));
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
    _timer.Enabled = true;
    _timer.Start(); // Get the timer to execute immediately
    _timer_Elapsed(null, null); // Get the timer to execute immediately
}
4

1 に答える 1

1
_timer_Elapsed(null, null); // Get the timer to execute immediately

これにより、タイマーがすぐにトリガーされるわけではありません。タイマーが実行するように設定されているのと同じ手順を実行するだけです。OnStartのスレッドで。

タイマーをすぐにトリガーする場合は、最初のラウンドの間隔を 1 または小さい値に設定します。

于 2014-04-13T13:36:46.500 に答える