Я нашел отличную страницу о том, как сделать эффективные асинхронные вызовы веб-служб с минимальными усилиями здесь:
http://www.jaylee.org/post/2010/06/22/WP7Dev-Using-the-WebClient-with-Reactive-Extensions-for-Effective-Asynchronous-Downloads.aspx
Что меня смущает, так это где я размещаю код, который я хочу выполнить после получения ответа от сервера? Система вызывает событие, когда это происходит? Простое размещение кода после вызова асинхронной загрузки не дает этой функциональности.
Я должен был быть более ясным; У меня есть этот код в моем проекте:
private void SearchBarcode(object sender, EventArgs e)
{
WebClient wc = new WebClient();
var o = Observable.FromEvent<DownloadStringCompletedEventArgs>(wc, "DownloadStringCompleted")
// Let's make sure that we’re on the thread pool
.ObserveOn(Scheduler.ThreadPool)
// When the event fires, just select the string and make
// an IObservable<string> instead
.Select(newString => ProcessString(newString.EventArgs.Result))
// Now go back to the UI Thread
.ObserveOn(Scheduler.Dispatcher)
// Subscribe to the observable, and set the label text
.Subscribe(s => parserInput = s);
wc.DownloadStringAsync(new Uri("http://api.search.live.net/xml.aspx?Appid=appidhere&query=barcodenumber&sources=web"));
}
Я не вижу, где можно разместить вызов события DownloadCompleted. SearchBarcode - это обработчик щелчка изображения; Куда уходит управление после выполнения SearchBarcode? Я хочу манипулировать значением parserInput и вызывать другую страницу xaml, передавая эти значения. Я пытался добавить void DownloadCompleted (отправитель объекта, DownloadStringCompletedEventArgs e), но он не вызывается, очевидно. Что мне здесь не хватает? (