以下に説明するように、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クラスによって保持されるデリゲートへの弱参照に関連するものであると確信しています。それが生き続けることが何であるかわからないので、私はその解決策だけで行くことはできませんか?イベントに参加したのはクラスですか?もしそうなら、falseを渡さなくてもクラスは生きています。それでは、最初のケースでイベントが発生/処理されないのはなぜですか?
誰かがこの振る舞いを説明できますか?