【发布时间】:2014-03-26 10:21:45
【问题描述】:
我正在使用 silverlight 访问网络服务以请求一些数据。此调用是异步的。我(我想我)必须在对它进行一些操作之后将这些数据放入一个类成员中,以便我以后可以访问它。
public class CardPrinter
{
// The card to be printed
private UIElement printCard;
public void PrintStaffCard(string p_persoons)
{
Debug.WriteLine(p_persoons);
foreach (string persoon in p_persoons.Split(','))
{
int p_persoon = Convert.ToInt32(persoon.Trim());
this.GetStaffData(p_persoon);
}
}
private void GetStaffData(int p_persoon)
{
PictureServiceClient proxy = new PictureServiceClient();
proxy.GetPersonelCardInfoCompleted += this.Proxy_GetPersonelCardInfoCompleted;
proxy.GetPersonelCardInfoAsync(p_persoon);
}
private void Proxy_GetPersonelCardInfoCompleted(object sender, GetPersonelCardInfoCompletedEventArgs e)
{
if (e.Error != null)
{
Debug.WriteLine(e.Error.Message);
}
else
{
this.SendStaffCardToPrinter(e.Result);
}
}
private void SendStaffCardToPrinter(CardInfo.CardInfo card)
{
Canvas canvas = new Canvas()
//Do some stuff
this.printCard = canvas;
PrintDocument pd = new PrintDocument();
pd.PrintPage += new EventHandler<PrintPageEventArgs>(this.Pd_PrintPage);
pd.Print(card.accountNr, null, true);
}
private void Pd_PrintPage(object sender, PrintPageEventArgs e)
{
e.PageVisual = this.printCard;
}
}
问题出在 printCard 变量中。有时它仍然包含来自 foreach 中先前异步调用的数据。
如果我能确保 foreach 中的调用完全完成,就不会有问题,但不确定如何执行此操作以及这是否是处理此问题的正确方法。
处理这种情况的最佳方法是什么?
【问题讨论】:
-
您可以将 CardInfo 存储到 Collection 中,然后等待所有 CardInfo 被填充。然后将其循环到 PrintPage() 之后..
标签: c# wcf silverlight asynchronous