我正在尝试在后台任务运行时更新主窗体中的进度条。
我正在使用来自最新模式和实践发布的 EventAggregator 路由我的应用程序范围的事件。
我正在从一个监听 BackgroundWorker 事件的类中触发一个事件,然后像这样触发一个事件:
- BW 上的进程触发 BW 方法以报告进度。
- BW 触发它的报告事件。
- 它们被在 BW 启动之前设置的 SomeCommand 类方法拾取。
- 我从 EventAggregator 发布事件
public void ProgressChanged(对象发送者,ProgressChangedEventArgs ea){ KnownProgressStatusChangedEvent evt = KernelKeeper.Kernel.Get().GetEvent(); evt.Publish(ea); }
我的 MainPresenter 已经订阅了这些事件:
KnownProgressStatusChangedEvent progressChanged = EventAggregator.GetEvent<KnownProgressStatusChangedEvent>();
progressChanged.Subscribe(KnownProgressChanged,ThreadOption.UIThread);
如果我不设置 ThreadOption.UIThread,我会在 Program.cs 中得到 TargetInvokationException,并且没有堆栈跟踪。这样我就没有例外,我可以进入 EventAggregator。
当它即将调用 KnownProgressChanged 方法时,它会尝试调用它并检查Application.Current != null
. 它是空的,没有任何东西被解雇。
我究竟做错了什么 ?请指教。