我使用silverlight訪問web服務來請求一些數據。這個調用是異步的。我想(我)必須在做一些操作後纔將這些數據放入一個類的成員中,以便以後可以訪問它。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中的調用完成,那麼不會有問題,但不知道如何做到這一點,如果這是處理這個問題的正確方法。
處理這種情況的最佳方法是什麼?
您可以將CardInfo存儲到Collection中並等待所有CardInfo被填充。然後將其循環到PrintPage()之後。 – bit