1つのクラス、ClassAに、私はタイマーオブジェクトを持っています。このクラスでは、タイマ経過イベントのイベントハンドラを登録します。 ClassBという別のクラスでは、タイマー経過イベント用のパブリックイベントハンドラがあります。次のようにだから私はにClassAにClassBのからイベントハンドラを登録します。ClassBののイベント・ハンドラの前のインスタンスがまだあるとき、私はClassBInstanceの新しいインスタンスとタイマ経過イベントが発生を作成した場合はどうなりますイベントが発生し、存在しなくなったオブジェクトのイベントハンドラを実行しようとするとどうなりますか?
myTimer.Elapsed += ClassBInstance.TimerElapsed
タイマーのElapsedイベントに結びついていますか?例えば
:
ClassB classBInstance = new ClassB();
myTimer.Elapsed += classBInstance.TimerElapsed
classBInstance = new ClassB();
myTimer.Elapsed += classBInstance.TimerElapsed
実際。特に、これは静的イベントが非常に危険な理由です。あなたが宗教的に登録を解除しなければ、膨大な数のオブジェクトを生かしておくことは非常に簡単です。少なくともインスタンスイベントは、バッキングフィールドを保持するインスタンスではなくなりますが、静的なGCはありません。 –
WPFがWeakEventsを使用してこれを回避するには、IMHOが複雑すぎるし、言語サポートが必要な場合もあることに言及する価値があります。 – Josh