ここに私が今では明らかに機能しない機能があります。それがうまくいかない理由は、WebClientが非同期であり、data
が空になってからWebClientによって満たされ、XMLリーダーでクラッシュするためです。この関数内でWebClientを呼び出すにはどうしたらいいですか?外部イベントハンドラを必要とするかどうかにかかわらず、必要に応じてServerResult
を返します。WebClientを呼び出す戻り値を必要とする関数を呼び出すにはどうすればよいですか?
static public ServerResult isBarcodeCorrectOnServer(string barcode)
{
Dictionary<string, IPropertyListItem> dict = configDictionary();
string urlString = (string.Format("http://www.myurl.com/app/getbarcodetype.php?realbarcode={0}&type={1}", barcode, dict["type"]));
WebClient wc = new WebClient();
string data = "";
wc.DownloadStringCompleted += (sender, e) =>
{
if (e.Error == null)
{
//Process the result...
data = e.Result;
}
};
wc.DownloadStringAsync(new Uri(urlString));
StringReader stream = new StringReader(data);
var reader = XmlReader.Create(stream);
var document = XDocument.Load(reader);
var username = document.Descendants("item");
var theDict = username.Elements().ToDictionary(ev => ev.Name.LocalName, ev => ev.Value);
if (theDict.ContainsKey("type") == true && theDict["type"].ToString() == dict["type"].ToString())
{
return ServerResult.kOnServer;
}
else if (theDict.ContainsKey("type") == true)
{
return ServerResult.kWrongType;
}
else
{
return ServerResult.kNotOnServer;
}
}
なぜ非同期バージョンのDownloadStringを使用しないのですか? – MarcinJuraszek
Silverlightは非同期をサポートしていません – BrokenGlass