2010-11-20 21 views
1

今、私はセッターとゲッターと一緒に3つの文字列を含むオブジェクトを持っています。今私は2つの質問を持っています -基本的なイベントハンドラーの質問

まず、私はC#を初めて使っています。次の方法を最適化し、より効率的にする方法はありますか?

void getSearchResults(object sender, RoutedEventArgs e) 
    { 
     string baseURL = "http://api.search.live.net/xml.aspx?Appid=<MyAPPID>&query=%22"; 
     string companyName = ((TaxiCompany)sender).CoName; 
     string formatAndKey = "%22&sources=web"; 
     WebClient c = new WebClient(); 
     c.DownloadStringAsync(new Uri(baseURL + companyName + formatAndKey)); 
     c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(findTotalResults); 
    } 


    //Parses search XML result to find number of results 
    void findTotalResults(object sender, DownloadStringCompletedEventArgs e) 
    { 
     lock (this) 
     { 
      string s = e.Result; 
      XmlReader reader = XmlReader.Create(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(s))); 
      String results = ""; 
      while (reader.Read()) 
      { 
       if (reader.NodeType == XmlNodeType.Element) 
       { 
        if (reader.Name.Equals("web:Total")) 
        { 
         results = reader.ReadInnerXml(); 
         break; 
        } 

       } 
      } 
     } 
    } 

次に、新しいタクシー会社(String name、String Phone、String Results)を初期化します。私は名前と番号を持っているので、上記の2つの関数を呼び出してオブジェクトを初期化できるようにnoOfResultsを呼び出す必要があります。しかし、私はイベントハンドラの問題に束縛されているようです。

私は主にWeb開発者でしたので、ここでは基本的に何かが欠けているかもしれません。私は、コンストラクタに戻って文字列を返すためのビングメソッドを設定する気持ちがもっとも簡単かもしれませんが、どうしたらよいか分かりません。

答えて

1

まず、メインページにロックは必要ありません。その後、私はあなたのXmlReaderのブロックでは、単一の、エレガントなラインでXMLドキュメントにアクセスできるようになりますXDocumentと呼ばれるLINQからXMLへの変化、と交換する必要があることを言う:

XDocument doc = XDocument.Parse(e.Result); 

あなたが持ったら特定のXNodeが含まれているかどうかを確認できます。

+0

X-Documentを試してください。しかしパート2の提案はありますか?それは私が立ち往生した場所です。 – varunsrin

+0

可能な解決策の1つは、イベントハンドラがトリガされるとプロパティを持ち、その値を設定することです。それから、あなたがしなければならないのはそれを読むことだけです。 –

+0

ありがとう、それは問題を修正するようだ。私は、構築のたびにグローバル変数を使用しています。 – varunsrin