首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在异步WCF响应线程上使用PRISM 4请求UI导航

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

Stack Overflow用户
提问于 2011-12-20 16:07:37
回答 1查看 2.1K关注 0票数 2

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

4.0)

  • WCF

  • PRISM 4 C# (.NET 4

)

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

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

代码语言:javascript
复制
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
    this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri)));

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

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

使用dispatcher尝试调用的类是View的视图模型。它使用控制反转(使用统一容器)创建。

下面是视图的构造函数,它请求视图-模型:

代码语言:javascript
复制
    public CredentialsInputView(ICredentialsInputViewModel viewModel)
    {
        InitializeComponent();
        ViewModel = viewModel;
        ...
    }

前面的代码将导致调用视图模型的构造函数。我尝试将dispatcher存储在VM的构造函数调用中,但使用它稍后调用UI导航似乎没有帮助。我认为视图模型不是在UI线程上创建的:

代码语言:javascript
复制
    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线程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-09 23:09:29

您可以使用棱镜事件聚合器来确保您在UI线程上。见此处:http://neverindoubtnet.blogspot.com/2009/05/event-aggregator-in-prism-explorer.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8578346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档