私のプロジェクト System.Timers.Timer
では、オブジェクトを作成しました。間隔は10分に設定されています。10分ごとに経過イベントが発生します。このイベントハンドラーでは、いくつかのコードを実行しています。
このコードを実行する前に、Enabled
プロパティをに等しく設定しています。これfalse
は、ハンドラーの実行に次の間隔よりも時間がかかる場合、別のスレッドが経過したイベントを実行するためです。
ここでの問題は、突然Elapsed
イベントが停止することです。
私はいくつかの記事を読み、falsegarbagecollectorに設定されたmomentenabledプロパティがタイマーオブジェクトを解放するのではないかと疑っています。
それが正しければ、解決策を教えてください。
以下はサンプルコードです。
public class Timer1
{
private static System.Timers.Timer aTimer;
public static void Main()
{
// Create a timer with a ten second interval.
aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 10min.
aTimer.Interval = 600000;
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Enabled = false;
// excutes some code
aTimer.Enabled = true;
}
}