私のコードでは単純なTimerを使用しています。コールバックは、時間が経過すると呼び出されます。System.ComponentModel.ComponentのDisposeメソッドは、イベントコールバックを解放しますか?
public TimerViewModel(int interval) {
m_timer = new Timer(interval);
m_timer.Elapsed += timer_Elapsed;
// Other stuff.
}
その後、私は、私はタイマーを配置またはそれはとにかく行われる前に今、私は私がm_timer.Elapsed -= timer_Elapsed
と私のコールバックの登録を解除することが出来るのですかどうかを知りたい
public void Dispose() {
m_timer.Dispose();
// Dispose some more stuff.
}
私のクラスを配置disposeメソッドを持っていますタイマーはメソッドを処理していますか?
TimersについてのMSDNサイトとComponentについてのMSDNサイトを読んでいますが、どちらも、その意味でDisposeメソッド「コンポーネントによって使用されているすべてのリソースを解放します」と記載されています。
したがって、Timer.Dispose()
メソッドは自分のコールバックを解放しますか?
他の誰もハンドラを参照していない場合、最終的にgcによって削除されます。 – NtFreX
'Timer'を処理すると、静的でないハンドラはすべて消去されます。しかし、私が代わりに 'WeakEvent'を使用することを提案する場合に備えてください。 –
これは必ずしも必要ではないはずです.TimerViewModelオブジェクトとタイマーの両方で同時にガベージコレクションが行われることが予想されます。これは、波及する可能性があり、TimerViewModelオブジェクトがどのように参照されているのかわかりませんが、配置されたオブジェクトへの参照を保持することは決して賢明ではありません。 –