微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – WPF在异步等待模式中使用带有WCF的MVVM

我正在构建一个使用MVVM作为模式和WCF后端的 WPF应用程序.
我的UI必须始终具有响应性,对于某些控件,数据最多可以加载10秒.

以下代码运行良好,并且在我的viewmodel中,其中ConfigurationsForInterface是绑定到我的控件的Observable类型:

ConfigurationsForInterface = new ObservableCollection<string>() { "Loading..." };      
ConfigurationsForInterface = await GetConfigurationInterfaceXAsync();

工作正常的方法

public async Task<ObservableCollection<string>> GetConfigurationHL7Server5Async()
        {
            ObservableCollection<string> result;

            using (var localClient = new ManagerListenerClient(Globals.ChannelBinding,Globals.EndpointAddress))
            {               
                result = await  localClient.GetConfigurationsAsync("interfacex");
            }

            return result;
        }

当我为服务(用户)设置上下文时重用已在应用程序的其他区域中打开的服务客户端时冻结我的UI的方法

06002

看起来WCF客户端以某种方式绑定到我的UI线程并导致我的UI冻结,直到加载数据.我可以从调试中看到它不会在方法本身等待.

有人可以帮助我解决为什么我无法重用我在其他地方使用的WCF客户端对象而不是总是在异步上下文中,例如同步调用viewmodel

解决方法

感谢@Rowbear,我确定了真正的问题.

我将绑定从WsHttpBinding更改为NetTCPBinding,然后一切运行良好的异步.对于我的应用程序,我可以轻松使用NetTCPBinding.

似乎某些东西仍在同步.在WsHttpBinding实现中.

谢谢!建议.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐