1

WPFアプリの弱いイベントマネージャーを使用して、XXXEventManager.AddListener(source、this);を使用して、イベントのソースをターゲットに接続しています。電話。ただし、コードが同じソースとターゲットを複数回接続することがあることに気付きました。これにより、実質的に同じ(つまり、フックアップごとに1つ)の複数のイベントが発生/処理されるように見えます。WeakEventManagerに問い合わせる(またはそれに機能を追加する)ことによって、ターゲットがすでにイベントソースに接続されているかどうかを判断することは可能ですか、それともターゲットに独自のリストを実装する必要がありますか?

また、ソースの存続期間中にイベントフックアップが存在する必要がある場合に、RemoveListenerを呼び出すために受け入れられるメソッドは何ですか?ファイナライザーを使用するとガベージコレクションに問題が発生するため、ファイナライザーを使用することはお勧めできません。これは正確ですか?

4

1 に答える 1

0

Eventmanagerがすでに接続されているかどうかは、GetInvocationListで確認できます。それが特定のターゲットを持つそのマネージャーにすでに接続されているかどうかを確認しますが、それが可能かどうかはわかりません。ただし、PropertychangedEventManagerを見ると、1つのターゲット(異なるプロパティ名で区別される)を持つ1つのマネージャーに複数のリスナーを追加することはまったく問題ありません。

私にとって、RemoveListenerを呼び出す正しい方法は、IDisposableを使用することです。ファイナライザーの問題は、オブジェクトがファイナライザーキューにあり、そのときにイベントを取得する可能性があるため、オブジェクトの寿命が長くなることです(それについてはよくわかりません)。多分これは役立つでしょう

于 2011-07-07T15:02:23.400 に答える