C# 在异步WCF响应线程上使用PRISM 4请求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

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

C.NET4.0 周转基金 棱镜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不会更新,也不会引发异常

尝试使用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线程上。请看这里:

谢谢克里斯,非常感谢,我一定会看一看的!谢谢克里斯,非常感谢,我一定要看一看!