0

2つのwebclientメソッドが次々に実行されています。

問題は、最初に実行されたものが2番目の実行後にのみ実行を終了することです。

私の主な問題は、2番目のメソッドが正常に実行するには、最初のメソッドのデータが必要なため、2番目のメソッドを実行するには、最初に最初のメソッドを完了する必要があるということです。

 {

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"を取得し、それを使用して2番目のメソッドでurl2を追加する必要がありますか?

しかし、私の2番目の方法は、最初の方法の前に完了しますか?

4

1 に答える 1

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

つまり、最初のリクエストが正常に完了した後、2番目のリクエストを行う必要があります。

于 2012-06-29T14:17:57.917 に答える