我有一个 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));
它“确实”着火了。尽管在概念上,在句法和逻辑上都是相似的。唯一的区别是第一个使用事件类中的辅助方法来订阅事件。
我确信这与 CompositeEvent 类保留的对委托的弱引用有关,因为如果我在订阅调用中设置 keepSubscriberAlive=true (第三个参数),第一个有效。我不能只采用那个解决方案,因为我不知道它会保持什么?会是订阅该事件的类吗?如果是这样,那么即使没有传递 false,该类仍然存在,那么为什么在第一种情况下没有触发/处理该事件?
谁能解释这种行为?