2011-07-07 6 views
1

弱いイベントマネージャをWPFアプリケーションで使用して、XXXEventManagerを使用してイベントのソースをターゲットに接続します。 AddListener(ソース、これ);コール。しかし、私のコードでは同じソースとターゲットを複数回接続することがあることに気付きました。これは、効果的に同じ(つまり、各フックアップごとに1つ)の複数のイベントが発生/処理されるように見えます。 WeakEventManagerを問い合わせることでターゲットが既にイベントソースに接続されているか(または機能を追加しているか)、ターゲットに自分自身のリストを実装する必要がありますか?弱いイベントマネージャを使用しているときにターゲットがソースを聴いているかどうかを確認するには

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

答えて

0

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

私にとって、RemoveListenerを呼び出す正しい方法はIDisposableを使用することです。ファイナライザの問題は、オブジェクトがファイナライザキューに存在し、その時にイベントが発生する可能性があるためです(そのことについては不明です)。たぶんこれはhelp

関連する問題