2012-05-01 58 views
1

我在windows phone 7應用程序中使用完成和異步方法有問題。在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); 

    } 

我預料,看到消息的日期則消息在列表框中發件人。 但是,首先列出所有日期,然後在列表框中列出發件人姓名。 我該如何解決這個問題?

回答

1

因爲這些事件是異步觸發的,所以首先使用foreach循環中的所有MessageDates填充ListBox。如果MessageDate不是完成事件參數的一部分,那麼你可以使用匿名方法已完成事件來填充列表框與MessageDateUser

memClient.GetUserByUserIdCompleted += (obj, e) => 
{ 
    if (e.Result == null) 
     return; 

    lstBxMessages.Items.Add(mes.MessageDate); 
    lstBxMessages.Items.Add(e.Result.UserName); 
} 
memClient.GetUserByUserIdAsync(mes.SenderUserID); 
+1

不起作用。超時異常在GetUserByUserId方法中未處理。 – user1285383