2009-07-15 4 views
4

私のコンポジットWPFアプリケーションでは、ユーザーがコントロールをダブルクリックしたときに公開されるイベントがあります。モジュールはイベントに登録し、必要なときにアクションを実行します。Composite WPF EventAggregatorサブスクリプションが失われています

このイベントは無作為に動作していないようです。ときどき私がアプリケーションを実行するときに、問題なしでイベントをトリガーすることができます。モジュールがイベントの受信を停止する前に、何度かトリガーすることしかできません。

デバッガを見ると、CAL EventAggregatorにはまだイベントがありますが、イベントにはサブスクリプションがありません。 EventAggregatorはどのようにして購読を失うことができますか?

答えて

4

サブスクリプションを削除するのはガベージコレクタでした。私は内部をよく読んでする必要がありますが、私は

this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(
    SomeFunction, ThreadOption.UIThread, true); 

this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(SomeFunction); 

を交換したときにそれが仕事を始めました。 UIスレッドのパラメータは私の問題ではありませんでしたが、他の人にとっては正しいスレッドでイベントを確実に処理することが重要です。

+1

明示的に指定しない限り、EventAggregatorは弱参照(http://msdn.microsoft.com/en-us/library/ms404247.aspx)を使用します。 –