2012-06-29 3 views
0

Deux méthodes de client Web s'exécutent l'une après l'autre.Fonction ne s'exécutant pas dans l'ordre pas à pas correct

Le problème est, le premier qui exécute seulement finit l'exécution après le second. Mon problème principal est que, pour que la deuxième méthode puisse s'exécuter, la première méthode doit d'abord être complétée parce que la seconde méthode exige que les données de la première méthode soient exécutées avec succès.

{ 

string name; 
string surname; 
string url1 =" //sample/1"; 
string url2 ="//sample/2"; 

     //execution point! 
     public void ListBox_SelectionChagned(Object sender, SelectionChangedEventArgs e) 
     { 
      var sel = ((ListBox)ContextMenuPopup.Child).SelectedItem; 


      SubName = Convert.ToString(sel); 


      try 
      { 

       WebClient webClient = new WebClient(); 
       Uri uri = new Uri(url1); 
       webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted1); 
       webClient.OpenReadAsync(uri); 


      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
    try 
      { 


       WebClient webClient = new WebClient(); 
       Uri uri = new Uri(url2 + name); 
       webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted2); 
       webClient.OpenReadAsync(uri); 
       System.Diagnostics.Debug.WriteLine(url2 + name); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 



} 

//Method1  
void webClient_OpenReadCompleted1(object sender, OpenReadCompletedEventArgs e) 
     { 
      DataContractJsonSerializer ser = null; 
      try 
      { 
       ser = new DataContractJsonSerializer(typeof(ObservableCollection<Subscriptions>)); 
       ObservableCollection<Subscriptions> alldata = ser.ReadObject(e.Result) as ObservableCollection<Subscriptions>; 
       foreach (data _dt in alldata) 
       { 

        name = First_Name; 
        surname = Surname;  
        System.Diagnostics.Debug.WriteLine("My first name " + name); 


       } 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

     } 

//Method2 
     void webClient_OpenReadCompleted2(object sender, OpenReadCompletedEventArgs e) 
     { 
      DataContractJsonSerializer ser = null; 
      try 
      { 
       ser = new DataContractJsonSerializer(typeof(ObservableCollection<Subscriptions>)); 
       ObservableCollection<Subscriptions> alldata = ser.ReadObject(e.Result) as ObservableCollection<Subscriptions>; 
       foreach (data _dt in alldata) 
       { 

        name = First_Name; 
        surname = Surname;  


       } 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 


} 
public class data 
    { 


     public string First_Name { get; set; } 
     public string Surname { get; set; } 
    } 
} 

Résumé: Je dois obtenir la valeur « nom » dans la première méthode et l'utiliser pour ajouter mon url2 dans la deuxième méthode?

mais ma deuxième méthode se termine avant ma première méthode?

Répondre

0

Déplacez ensuite le code suivant du gestionnaire d'événements selectionChanged au gestionnaire d'événements webClient_OpenReadCompleted1

WebClient webClient = new WebClient(); 
Uri uri = new Uri(url2 + name); 
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted2); 
webClient.OpenReadAsync(uri); 
System.Diagnostics.Debug.WriteLine(url2 + name); 

cela signifie, vous devez faire la deuxième demande après le succès de la première demande.

Questions connexes