.net Prism CompositeEvent未使用助手类指定的匿名筛选器委托激发
我有一个TestEvent类,如下所述:.net Prism CompositeEvent未使用助手类指定的匿名筛选器委托激发,.net,wpf,prism,prism-4,.net,Wpf,Prism,Prism 4,我有一个TestEvent类,如下所述: class TestEvent: CompositePresentationEvent<object> { public void Subscribe(Action<object> action, int number) { this.Subscribe(action, ThreadOption.PublisherThread, false, arg=>arg.
class TestEvent: CompositePresentationEvent<object>
{
public void Subscribe(Action<object> action, int number)
{
this.Subscribe(action, ThreadOption.PublisherThread, false, arg=>arg.Equals(number));
}
}
class TestEvent:CompositePresentationEvent
{
公共无效订阅(操作操作,整数)
{
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));
eventAggregator.GetEvent().Subscribe(=>MessageBox.Show(“Hi”),3);
事件未被激发。但是,如果我这样订阅:
eventAggregator.GetEvent<TestEvent>().Subscribe(_=>MessageBox.Show("Hi"), 3);
eventAggregator.GetEvent<TestEvent>().Subscribe(_ => MessageBox.Show("Hi"), ThreadOption.PublisherThread, false, arg => arg.Equals(3));
eventAggregator.GetEvent().Subscribe(=>MessageBox.Show(“Hi”),ThreadOption.PublisherThread,false,arg=>arg.Equals(3));
它“确实”着火了。虽然在概念上,语法上和逻辑上都是相似的。唯一的区别是第一个使用事件类中的helper方法订阅事件
我确信这与CompositeeEvent类保留的对委托的弱引用有关,因为如果我在subscribe调用中设置keepSubscriberAlive=true(第三个参数),第一个引用就有效。我不能就这么做,因为我不知道它能维持什么?订阅活动的是班级吗?如果是这样,那么即使没有传递false,类仍然是活动的,那么为什么在第一种情况下没有触发/处理事件
有人能解释这种行为吗?在第一个示例中,代码捕获一个变量,并传递给TestEvent的方法。在这种情况下,编译器需要创建一个封装数字的类。每次调用TestEvent的Subscribe时,都应该实例化这个类的一个新实例 在第二个示例中,没有要捕获的数据,因此传递给Subscribe的委托可以是静态的。在这种情况下,它将在域卸载之前生存