如何从工作线程中调用UI线程上的方法?

时间:2011-12-20 15:33:44

标签: c# wpf multithreading wcf prism

我正在开发一个使用以下技术的项目:

  • C#(.NET 4.0)
  • WCF
  • PRISM 4

我目前正在使用代理生成的Begin / End方法对我们的某个Web服务进行异步调用。调用成功,客户端能够在工作线程上接收Web服务的响应。

收到回复后,我继续举办活动。订阅该事件的类继续使用PRISM请求UI导航:

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
    this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri)));

由于未在UI线程上捕获异步WCF响应,因此我不得不使用Application.Current.Dispatcher.BeginInvoke(...)调用UI线程。

这里的问题是调用似乎什么都不做。 UI未更新,不会抛出任何异常。

我应该如何在工作线程中引发的事件中调用UI线程?

编辑:此问题已在以下链接中重新询问,因为假定的副本未提供答案:

Request UI navigation using PRISM 4 on an asynchronous WCF response thread

1 个答案:

答案 0 :(得分:7)

您需要确保在实际用户界面Dispatcher上调用,而不一定是Current。您可以尝试传递UI Dispatcher,或者使用某种形式的回调来处理UI。