复合WPF EventAggregator订阅正在丢失
问题描述:
在我的复合WPF应用程序中,我有一个用户双击控件时发布的事件。模块订阅事件并在必要时执行操作。复合WPF EventAggregator订阅正在丢失
此事件似乎随机停止工作。有时当我运行应用程序时,我可以毫无问题地触发事件,其他时候我只能在模块停止接收事件之前触发它几次。
当我查看调试器时,CAL EventAggregator
仍然有事件,但该事件没有订阅。 EventAggregator
如何失去订阅?
答
原来是垃圾收集器删除订阅。我必须对内部读了起来,但是当我更换
this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(SomeFunction);
与
this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(
SomeFunction, ThreadOption.UIThread, true);
它开始工作。 UI线程参数不是我的问题,但对于其他人来说,确保您也在正确的线程上处理事件可能很重要。
EventAggregator使用弱引用(http://msdn.microsoft.com/en-us/library/ms404247.aspx),除非您明确地告诉它不要。 – 2009-07-15 19:07:43