2012-06-29 75 views
0

我有2个webclient方法一个接一个执行。函数没有按正确的步骤顺序执行

问题是,第一个只执行完第二个之后执行。

我的主要问题是,为了使第二个方法优先,第一个方法首先需要完成,因为第二个方法需要第一个方法中的数据成功执行。

{ 

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; } 
    } 
} 

摘要:我需要在第一个方法中获取值“name”并使用它在第二个方法中追加我的url2?

但我的第二种方法完成之前,我的第一个方法?

回答

0

然后移动从SelectionChanged事件处理程序下面的代码到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); 

这意味着,你必须做出的第一个请求成功完成后的第二个请求。