私はタクシー会社のリストを見つけてBingから名前と住所を引き出し、ユーザーに表示されているリストボックスに入力するWin Phoneアプリを持っています。今、私は何をしたい(人気順位の緩い一種)だから、Windows Phoneで非同期XMLを読む7
void findBestResult(object sender, DownloadStringCompletedEventArgs e)
{
string s = e.Result;
XmlReader reader = XmlReader.Create(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(s)));
String name = "";
String rName = "";
String phone = "";
List<TaxiCompany> taxiCoList = new List<TaxiCompany>();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name.Equals("pho:Title"))
{
name = reader.ReadInnerXml();
rName = name.Replace("&","&");
}
if (reader.Name.Equals("pho:PhoneNumber"))
{
phone = reader.ReadInnerXml();
}
if (phone != "")
{
string baseURL = "http://api.search.live.net/xml.aspx?Appid=<MyAppID>&query=%22" + name + "%22&sources=web";
WebClient c = new WebClient();
c.DownloadStringAsync(new Uri(baseURL));
c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(findTotalResults);
taxiCoList.Add (new TaxiCompany(rName, phone, gResults));
}
phone = "";
gResults ="";
}
TaxiCompanyDisplayList.ItemsSource = taxiCoList;
}
}
そのビットのを、ビンビンにこれらの用語のそれぞれの検索各検索語リターンヒット数を見つけ、それに応じてランク付けすること、ですコードはタクシー会社を見つけ、各teaxicompanyオブジェクトを作成するための検索結果(gResults)の数を見つける非同期タスクを起動します。
//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)));
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name.Equals("web:Total"))
{
gResults = reader.ReadInnerXml();
}
}
}
}
}
は、上記のスニップは、ビングの検索結果の数を見つけたが、それは方法1で右の会社と第二の方法で得られたgResultsを相関させる方法はありありません非同期(async)起動するので、問題がありますいずれかのいずれかの方法:
1)がタクシーオブジェクト
2を作成するために、第二の方法に名前と電話変数を渡す)変数gResultsバックパスし、だけにして、対応するtaxicompanyオブジェクトを作成しますか?
ありがとう、UserStateは私が探していたものです – varunsrin