Windows phone 7 异步回调函数在完成时是否引发事件?

Windows phone 7 异步回调函数在完成时是否引发事件?,windows-phone-7,webservice-client,system.reactive,Windows Phone 7,Webservice Client,System.reactive,我在这里找到了一个很好的页面,介绍如何以最少的工作量高效地异步调用web服务: 我感到困惑的是,在从服务器接收到响应后,我要将要执行的代码放在哪里?发生这种情况时,系统是否引发事件?简单地将代码放在调用asyncdownload之后并不能提供此功能 我应该更清楚一点;我的项目中有以下代码: private void SearchBarcode(object sender, EventArgs e) { WebClient wc = new WebClient(

我在这里找到了一个很好的页面,介绍如何以最少的工作量高效地异步调用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"));
    }
private void SearchBarcode(对象发送者,事件参数e)
{
WebClient wc=新的WebClient();
var o=可观察的FromEvent(wc,“DownloadStringCompleted”)
//让我们确保我们在线程池中
.ObserveOn(Scheduler.ThreadPool)
//当事件激发时,只需选择字符串并使
//一个IObservable替代
.Select(newString=>ProcessString(newString.EventArgs.Result))
//现在回到UI线程
.ObserveOn(调度程序.Dispatcher)
//订阅observable,并设置标签文本
.Subscribe(s=>parserInput=s);
wc.DownloadStringAsync(新Uri(“http://api.search.live.net/xml.aspx?Appid=appidhere&query=barcodenumber&sources=web"));
}

我看不到可以在哪里放置下载完成的事件调用。SearchBarcode是图像的onclick处理程序;执行SearchBarcode后,控制在哪里?我想操纵parserInput的值,并调用另一个传递这些值的xaml页面。我尝试添加一个空的DownloadCompleted(对象发送者,DownloadStringCompletedEventArgs e),但显然没有调用它。我错过了什么(

您可以将此逻辑放在回调的末尾

在您链接的示例中,这就是他在DownloadCompleted中对Dispatcher所做的

这是我编写的一个示例项目,演示了HttpWebRequest的使用

Dispatcher.BeginInvoke(() => { httpWebRequestTextBlock.Text = contents; });
…以更新UI

请随意编写此代码并使用您的URL


您可以将您的代码放入下载完成的
方法中,该方法将随下载结果一起调用。请注意,任何代码都将在主线程上执行。如果您有繁重的处理任务,我建议
HTTPWebRequest

您能详细解释一下您想要什么吗?您放入下载完成"事件处理程序将在下载完成后运行。那么您还想要什么?或者这有什么问题?作为参考,会引发事件。会引发错误。伙计们,我已将我的问题编辑为更具体的问题。感谢您的关注:DHiya Thomas,我不熟悉HTTPWebRequest及其在此上下文中的用法。我可以获得链接吗,pl易用性?它的工作方式与Webclient相同,但在回调中,您将有更多的代码来访问UI线程。doc:用法示例:谢谢…这是一个很好的页面,有一个很好的干净示例:)我将尝试添加一个DownloadCompleted方法,并在将您的答案标记为正确答案之前使其工作。谢谢您所做的一切,我使用Mick的示例成功地将代码转换为使用httpwebrequest:)不用担心,我添加了一个工作示例项目,您可以将url/ui更新逻辑插入其中。看起来您现在已经学习了一个Rx(反应式扩展名)示例。。这是您最初需求的一部分吗?我之所以选择Rx,是因为它完成了与HttpWebRequest相同的任务(不阻止UI线程)。我看了你的代码,看起来很简单。虽然我的项目不需要Rx,但我不想改变,因为它们可以工作:P问题是,我仍然无法让回调函数工作。我尝试过void DownloadStringCompleted(objectsender,DownloadStringCompletedEventArgs e)及其所有变体,但仍然没有成功:(在你看到的帖子中,他正在用.Subscribe更新他的UI(s=>myLabel.Text=s,e=>myLabel.Text=“Error!”+e.Message);是的,我理解这句话。我只是想知道是否有可能用函数调用替换myLabel.Text=s位。@奇怪的是,不要将Rx视为“不阻塞UI线程”,而应将其视为管理异步。