C# 在异步WCF响应线程上使用PRISM 4请求UI导航
我正在从事一个使用以下技术的项目: C.NET4.0 周转基金 棱镜4 我目前正在使用代理生成的Begin/End方法对我们的一个Web服务进行异步调用。调用成功,客户端能够在工作线程上接收Web服务的响应 收到响应后,我继续提出一个事件。订阅事件的类继续使用PRISM请求UI导航:C# 在异步WCF响应线程上使用PRISM 4请求UI导航,c#,wpf,multithreading,wcf,prism,C#,Wpf,Multithreading,Wcf,Prism,我正在从事一个使用以下技术的项目: C.NET4.0 周转基金 棱镜4 我目前正在使用代理生成的Begin/End方法对我们的一个Web服务进行异步调用。调用成功,客户端能够在工作线程上接收Web服务的响应 收到响应后,我继续提出一个事件。订阅事件的类继续使用PRISM请求UI导航: Application.Current.Dispatcher.BeginInvoke(new Action(() => this.RegionManager.RequestNavigate(Regio
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri)));
由于异步WCF响应未在UI线程上捕获,因此我被迫使用Application.Current.Dispatcher.BeginInvoke….调用UI线程
这里的问题是调用似乎什么都不做。UI不会更新,也不会引发异常
尝试使用dispatcher调用的类是视图的视图模型。它是使用UNITY容器的控制反转创建的
以下是视图的构造函数,它请求其视图模型:
public CredentialsInputView(ICredentialsInputViewModel viewModel)
{
InitializeComponent();
ViewModel = viewModel;
...
}
前面的代码导致调用视图模型的构造函数。我尝试将调度程序存储在VM的构造函数调用中,但稍后使用它调用UI导航似乎没有帮助。我认为视图模型不是在UI线程上创建的:
private static System.Windows.Threading.Dispatcher dispatcher;
/// <summary>
/// Initializes a new instance of the <see cref="CredentialsInputViewModel"/> class.
public CredentialsInputViewModel(ICodexLoginService codexLoginService, ISessionService sessionService, IRegionManager regionManager)
{
dispatcher = Application.Current.Dispatcher;
...
}
如何从工作线程上引发的事件中调用UI线程?您可以使用prism事件聚合器确保您在UI线程上。请参见此处:您可以使用prism事件聚合器来确保您处于UI线程上。请看这里:谢谢克里斯,非常感谢,我一定会看一看的!谢谢克里斯,非常感谢,我一定要看一看!