[英]completed and async methods in windows phone 7 application
我在Windows Phone 7應用程序中使用完整和異步方法時遇到問題。
我的代碼在這里:
private void messageClient_getMessageOfUserCompleted(object sender, ADRTRYST_CLIENT.LocalHostMessageService.getMessageOfUserCompletedEventArgs e)
{
//lstBxMessages.ItemsSource = e.Result;
System.Collections.ObjectModel.ObservableCollection<ADRTRYST_CLIENT.LocalHostMessageService.OBJMessage> mesList = e.Result;
foreach (ADRTRYST_CLIENT.LocalHostMessageService.OBJMessage mes in mesList)
{
MessageObj message = new MessageObj();
message.Date = mes.MessageDate;
messageList.Add(message);
ADRTRYST_CLIENT.LocalHostMemberShipService.MemberShipSoapClient memClient = new ADRTRYST_CLIENT.LocalHostMemberShipService.MemberShipSoapClient();
MessageBox.Show(memClient.State.ToString());
memClient.GetUserByUserIdCompleted += new EventHandler<ADRTRYST_CLIENT.LocalHostMemberShipService.GetUserByUserIdCompletedEventArgs>(memClient_GetUserByUserIdCompleted);
memClient.GetUserByUserIdAsync(mes.SenderUserID);
lstBxMessages.Items.Add(mes.MessageDate);
}
}
private void memClient_GetUserByUserIdCompleted(object sender, ADRTRYST_CLIENT.LocalHostMemberShipService.GetUserByUserIdCompletedEventArgs e)
{
ADRTRYST_CLIENT.LocalHostMemberShipService.OBJPerson user = e.Result;
if (user != null)
lstBxMessages.Items.Add(user.UserName);
}
我期望看到消息的日期,然后在列表框中看到消息的發件人。 但是,首先列出所有日期,然后在列表框中列出發件人姓名。 我該如何解決這個問題?
因為事件是異步觸發的,所以首先將foreach
循環中的所有MessageDates
填充到ListBox中。 如果MessageDate
不是完成的事件參數的一部分,則可以對完成的事件使用匿名方法,以用MessageDate
和User
填充列表框:
memClient.GetUserByUserIdCompleted += (obj, e) =>
{
if (e.Result == null)
return;
lstBxMessages.Items.Add(mes.MessageDate);
lstBxMessages.Items.Add(e.Result.UserName);
}
memClient.GetUserByUserIdAsync(mes.SenderUserID);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.