Céd*_*nne 5 c# wpf wcf mvvm async-await
我正在构建一个 WPF 应用程序,它使用 MVVM 作为模式以及 WCF 后端。我的 UI 必须始终具有响应能力,对于某些控件,数据加载时间可能长达 10 秒。
以下代码运行良好,位于我的视图模型中,其中 ConfigurationsForInterface 是绑定到我的控件的 Observable 类型:
ConfigurationsForInterface = new ObservableCollection<string>() { "Loading..." };
ConfigurationsForInterface = await GetConfigurationInterfaceXAsync();
Run Code Online (Sandbox Code Playgroud)
效果很好的方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
当我为服务(用户)设置上下文时重用已在应用程序其他区域中打开的服务客户端时,冻结我的 UI 的方法:
Run Code Online (Sandbox Code Playgroud)public async Task<ObservableCollection<string>> GetConfigurationHL7Server5Async() { ObservableCollection<string> result; result = await Globals.Client.GetConfigurationsAsync("interfacex"); return result; }
WCF 客户端似乎以某种方式绑定到我的 UI 线程,导致我的 UI 冻结,直到加载数据。我从调试中可以看到它不会在方法本身中等待。
有人可以帮我解决为什么我不能重用在其他地方使用的 WCF 客户端对象,而不是总是在异步上下文中,就像同步调用视图模型一样
感谢@Rowbear,我查明了真正的问题。
我将绑定从 WsHttpBinding 更改为 NetTCPBinding,然后一切都可以很好地异步运行。对于我的应用程序,我可以轻松使用 NetTCPBinding。
似乎有些东西仍在同步。在 WsHttpBinding 实现中。
谢谢!寻求建议。
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |