我找到了一个很棒的页面,可以轻松地对Web服务进行高效的异步调用:
我感到困惑的是,在从服务器收到响应后,我在哪里放置我想要执行的代码?发生这种情况时,系统会引发事件吗?只需在调用asyncdownload之后放置代码就不会提供此功能。
我应该更清楚;我在我的项目中有这个代码:
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是图像的onclick处理程序; SearchBarcode执行后控制在哪里?我想操纵parserInput的值并调用另一个传递这些值的xaml页面。我已经尝试添加一个void DownloadCompleted(对象发送者,DownloadStringCompletedEventArgs e)但显然没有被调用。我在这里错过了什么? :(
答案 0 :(得分:1)
您可以将此逻辑放在回调的末尾。
在示例中,您链接了他正在使用DownloadCompleted中的Dispatcher进行的操作。
这是我编写的一个示例项目,演示了如何使用HttpWebRequest。在ResponseCallback结束时,您将看到......
Dispatcher.BeginInvoke(() => { httpWebRequestTextBlock.Text = contents; });
...更新用户界面。
随意破解此代码并使用您的网址。
WebClient, HttpWebRequest and the UI Thread on Windows Phone 7
答案 1 :(得分:1)
您可以将代码放在DownloadCompleted
方法中,该方法会根据您下载的结果进行调用。请注意,任何代码都将在主线程上执行。如果你有繁重的处理,我建议HTTPWebRequest