【问题标题】:Multiple silverlight async calls and combobox source多个 silverlight 异步调用和组合框源
【发布时间】:2014-08-05 08:07:14
【问题描述】:

我有 3 个组合框,每个组合框都需要不同的来源。对于每个源,我都有 WCF 服务,并且每个服务在同一时间异步调用。 我的问题是,当最后一个服务完成时,每个组合框都会被填充,它们都在等待最长的服务。当他的服务完成时,我需要填充组合框。

我的代码:

public ArtiklViewModel Artikl;

public ItemNewEdit(ArtiklViewModel _artikl, bool _edit)
{
        InitializeComponent();

        Artikl = _artikl;

        SifarnikServiceClient service1 = new SifarnikServiceClient();
        service1.GetSifarniksByVrstaAsync(1);
        service1.GetSifarniksByVrstaCompleted += new EventHandler<GetSifarniksByVrstaCompletedEventArgs>(service_GetSifarniks1Completed);

        SifarnikServiceClient service2 = new SifarnikServiceClient();
        service2.GetSifarniksByVrstaAsync(2);
        service2.GetSifarniksByVrstaCompleted += new EventHandler<GetSifarniksByVrstaCompletedEventArgs>(service_GetSifarniks2Completed);

        SifarnikServiceClient service3 = new SifarnikServiceClient();
        service3.GetSifarniksByVrstaAsync(3);
        service3.GetSifarniksByVrstaCompleted += new EventHandler<GetSifarniksByVrstaCompletedEventArgs>(service_GetSifarniks3Completed);
}

    void service_GetSifarniks1Completed(object sender, GetSifarniksByVrstaCompletedEventArgs e)
    {
        combo1.ItemsSource = e.Result.ToList();
        if (Artikl != null)
            combo1.SelectedValue = Artikl.JmjID;
    }

    void service_GetSifarniks2Completed(object sender, GetSifarniksByVrstaCompletedEventArgs e)
    {
        combo2.ItemsSource = e.Result.ToList();
        if (Artikl != null)
            combo2.SelectedValue = Artikl.GrupaID;
    }

    void service_GetSifarniks3Completed(object sender, GetSifarniksByVrstaCompletedEventArgs e)
    {
        combo3.ItemsSource = e.Result.ToList();
        if (Artikl != null)
            combo3.SelectedValue = Artikl.TarifaID;
    }

【问题讨论】:

  • 调用后所有服务都将被释放的事实将导致问题。我个人会尝试使用 async 关键字来简化代码,如果您可以控制 SifarnikServiceClient 这会更容易。
  • 你在构造函数中调用你的服务。构造函数执行是同步的,它不支持 async 关键字。此外,您还没有提供 SifarnkServiceClient 方法的签名。如果它们是异步的,那么您可以创建一个新委托,将其连接到页面加载,然后应该正确调用这些方法。此外,您应该在调用方法之前设置事件处理程序。
  • @zaitsman 你能提供一些代码来表达你的建议吗?谢谢

标签: c# wcf silverlight asynchronous combobox


【解决方案1】:

这类事情是基于 Xaml 的 UI(如 Silverlight 和 UWP)的常见问题。问题是标准的 Microsoft Selector 控件还没有准备好异步。他们关心 ItemsSource 和 SelectedItem 的设置顺序。我昨天提出了一个建议的解决方案。它相当复杂,但很全面。你可能想看看。

https://stackoverflow.com/questions/36003805/uwp-silverlight-combobox-selector-itemssource-selecteditem-race-condition-solu

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    相关资源
    最近更新 更多