次のコードでは、 aTimer
が関数内で宣言されており、Elapsed
イベントもサブスクライブしています。
void StartTimer()
{
System.Timers.Timer timer = new System.Timers.Timer(1000);
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.AutoReset = false;
timer.Start();
}
関数が完了すると、 への参照Timer
は失われます (推測します)。
オブジェクトが破棄されると、イベントは自動的に登録解除されますか?Elapsed
そうでない場合、Elapsed イベント自体でイベントの登録を解除できますか?
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
var timer = (System.Timers.Timer)sender;
timer.Elapsed -= timer_Elapsed;
}
このアプローチでは、オブジェクトの適切なクリーンアップが引き続き許可されますか、またはこの理由で関数のローカル スコープでタイマーを宣言しないでください。