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

本文关键字:线程 UI 方法 调用 工作 | 更新日期: 2023-09-27 18:18:37

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

  • c#(。NET 4.0)
  • WCF
  • 棱镜4

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

一旦收到响应,我继续引发一个事件。订阅事件的类继续使用PRISM请求UI导航:

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

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

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

我应该如何从一个事件中调用UI线程,在一个工作线程上引发?

编辑:这个问题已经在以下链接中重新问过了,因为假定的副本没有提供答案:

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

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

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