C# 多个silverlight异步调用和combobox源

C# 多个silverlight异步调用和combobox源,c#,wcf,silverlight,asynchronous,combobox,C#,Wcf,Silverlight,Asynchronous,Combobox,我有3个组合框,每个组合框需要不同的来源。对于每个源,我都有WCF服务,并且在同一时间异步调用每个服务。 我的问题是,每个组合框都是在最后一个服务完成时填充的,它们都在等待最长的服务。当他的服务完成时,我需要填充combobox 我的代码: public ArtiklViewModel Artikl; public ItemNewEdit(ArtiklViewModel _artikl, bool _edit) { InitializeComponent();

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

我的代码:

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;
    }
公共ArtiklViewModel Artikl;
公共项目新建编辑(ArtiklViewModel\u artikl,bool\u edit)
{
初始化组件();
Artikl=_Artikl;
SifarnikServiceClient service1=新的SifarnikServiceClient();
服务1.GetSifarniksByVrstaAsync(1);
service1.GetSifarniksByVrstaCompleted+=新的事件处理程序(service\u GetSifarniks1Completed);
SifarnikServiceClient service2=新的SifarnikServiceClient();
服务2.GetSifarniksByVrstaAsync(2);
service2.GetSifarniksByVrstaCompleted+=新的事件处理程序(service\u GetSifarniks2Completed);
SifarnikServiceClient service3=新的SifarnikServiceClient();
服务3.GetSifarniksByVrstaAsync(3);
service3.GetSifarniksByVrstaCompleted+=新事件处理程序(service\u GetSifarniks3Completed);
}
无效服务\u GetSiFarniks1已完成(对象发送方,GetSifarniksByVrstaCompletedEventArgs e)
{
combo1.ItemsSource=e.Result.ToList();
if(Artikl!=null)
combo1.SelectedValue=Artikl.JmjID;
}
无效服务\u GetSiFarniks2已完成(对象发送方,GetSifarniksByVrstaCompletedEventArgs e)
{
combo2.ItemsSource=e.Result.ToList();
if(Artikl!=null)
combo2.SelectedValue=Artikl.grupay;
}
无效服务\u GetSiFarniks3已完成(对象发送方,GetSifarniksByVrstaCompletedEventArgs e)
{
combo3.ItemsSource=e.Result.ToList();
if(Artikl!=null)
combo3.SelectedValue=Artikl.TarifaID;
}

这类问题是Silverlight和UWP等基于Xaml的UI的常见问题。问题是标准的Microsoft选择器控件没有异步就绪。他们关心ItemsSource和SelectedItem的设置顺序。我昨天提出了一个解决方案。这很复杂,但很全面。你可能想看看


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