2012-05-01 8 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

イベントが非同期的に発生しているため、ListBoxはforeachループ内のすべてのMessageDatesで最初に満たされています。 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

関連する問題