【发布时间】: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