我正在构建一个使用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被冻结的方法:当我为服务设置上下文(用户)并重复使用已在应用程序其他区域打开的服务客户端时,会导致UI被冻结。
public async Task<ObservableCollection<string>> GetConfigurationHL7Server5Async()
{
ObservableCollection<string> result;
result = await Globals.Client.GetConfigurationsAsync("interfacex");
return result;
}
似乎WCF客户端与我的UI线程绑定,导致UI在数据加载完成前冻结。我可以从调试中看到它并没有在方法本身等待。有人能帮我解决为什么我不能重用我的WCF客户端对象吗?该对象已在其他地方使用,并不总是在异步上下文中,如只是同步调用视图模型。