关于c#:如何从工作线程中调用UI线程上的方法?

How to invoke a method on the UI thread from within a worker thread?

本问题已经有最佳答案,请猛点这里访问。

我正在研究一个使用以下技术的项目:

  • C.net(.net 4)
  • WCF
  • 棱镜4

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

一旦收到响应,我就开始引发一个事件。订阅事件的类继续使用prism请求用户界面导航:

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

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

这里的问题是调用似乎什么都不做。用户界面未更新,不会引发异常。

如何从工作线程上引发的事件中调用UI线程?

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

在异步WCF响应线程上使用Prism 4请求UI导航


您需要确保调用的是实际的ui Dispatcher,而不是Current。您可以尝试传入ui-Dispatcher,或者在某个地方由ui处理某种形式的回调。