x 分ごとに何らかのメソッドを実行する Windows サービスを作成していますが、メソッドをタイマー自体に対して同期的に実行したいと考えています。Windows サービスには Timer オブジェクト (System.Timers.Timer) があり、x 分ごとにメソッド「DoWork」を開始して呼び出しますが、タイマーは「DoWork」の実行中に「停止」し、メソッドが終了した後に再び開始する必要があります。
System.Windows.Forms.Timer クラスを使用すると、必要な動作が得られることはわかっていますが、Service プロジェクトに System.Windows.Forms dll 参照を追加したくありません。
これは「動作する」コードの例です:
private System.Timers.Timer timer1;
public void MainMethod()
{
timer1 = new System.Timers.Timer();
timer1.Interval = 1000;
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Start();
}
void timer1_Elapsed(object sender, ElapsedEventArgs e)
{
timer1.Stop();
DoWork();
timer1.Start();
}
private void DoWork()
{
Thread.Sleep(2000);
Console.WriteLine("found!");
}
コンソール アプリケーションで上記を実行すると (Windows サービスを作成する前のモックアップとして)、期待される動作は、コンソールが 'found!' を書き込むことです。3秒ごと。
余談ですが、「Thread.Sleep(2000)」を使用して遅延を模倣しているだけですが、実際のコード ベースの一部にはなりません。
上記の方法よりもこれを達成するための他の/「より良い」方法はありますか?
私の質問を読んでくれてありがとう。