で指定された匿名のフィルタデリゲートで発生しません:プリズムCompositeEvent後述するように、私はTestEventクラスを持っているヘルパークラス
class TestEvent: CompositePresentationEvent<object>
{
public void Subscribe(Action<object> action, int number)
{
this.Subscribe(action, ThreadOption.PublisherThread, false, arg=>arg.Equals(number));
}
}
私はそうのようなイベントを購読している場合:
eventAggregator.GetEvent<TestEvent>().Subscribe(_=>MessageBox.Show("Hi"), 3);
イベントがされます解雇されません。しかし、私がそれを購読すれば、それはそうです:
eventAggregator.GetEvent<TestEvent>().Subscribe(_ => MessageBox.Show("Hi"), ThreadOption.PublisherThread, false, arg => arg.Equals(3));
それは '火'です。概念的には、構文的にも論理的にもどちらも似ています。唯一の違いは、最初のイベントクラスはイベントクラスにヘルパーメソッドを使用してイベントに登録することです。
これは、サブスクライブコールでkeepSubscriberAlive = true(3番目の引数)を設定すると、最初のものが機能するため、CompositeEventクラスによって保持されているデリゲートへの弱い参照に関連するものと確信しています。私はそれが生き続けることが何であるか分からないので、私はその解決策と一緒に行くことができませんか?イベントに登録したクラスになりますか?そうであれば、クラスは偽を渡さなくても生きています。なぜ、最初のケースでイベントが発生/処理されないのですか?
誰でもこの動作を説明できますか?