gpt4 book ai didi

c# - WPF 在异步等待模式中使用 MVVM 和 WCF

转载 作者:行者123 更新时间:2023-11-30 12:56:22 24 4
gpt4 key购买 nike

我正在构建一个 WPF 应用程序,它使用 MVVM 作为模式以及 WCF 后端。我的 UI 必须始终响应,并且对于某些控件,数据可能需要长达 10 秒才能加载。

以下代码运行良好并且在我的 View 模型中,其中 ConfigurationsForInterface 是绑定(bind)到我的控件的 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 的方法,因为我在为服务(用户)设置上下文时重用已在应用的其他区域打开的服务客户端:

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

result = await Globals.Client.GetConfigurationsAsync("interfacex");

return result;
}

似乎 WCF 客户端以某种方式绑定(bind)到我的 UI 线程并导致我的 UI 卡住,直到加载数据。从我的调试中可以看出,它不会在方法本身中等待。

有人能帮我解决为什么我不能重用我在别处使用的 WCF 客户端对象,而不是总是在异步上下文中,比如同步调用 View 模型

最佳答案

感谢@Rowbear,我查明了真正的问题。

我将我的绑定(bind)从 WsHttpBinding 更改为 NetTCPBinding,然后一切都很好地异步运行。对于我的应用程序,我可以轻松地使用 NetTCPBinding。

似乎有些东西还在同步。在 WsHttpBinding 实现中。

谢谢!征求意见。

关于c# - WPF 在异步等待模式中使用 MVVM 和 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41509147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com