Windows phone 7 WP7从异步HttpWebRequest获取返回值

Windows phone 7 WP7从异步HttpWebRequest获取返回值,windows-phone-7,asynchronous,httpwebrequest,Windows Phone 7,Asynchronous,Httpwebrequest,我编写了以下代码: private void button1_Click(object sender, RoutedEventArgs e) { HttpWebRequest request = SendRequests.CreateRequest(serverTextBox.Text); IAsyncResult result = request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallb

我编写了以下代码:

private void button1_Click(object sender, RoutedEventArgs e)
    {
        HttpWebRequest request = SendRequests.CreateRequest(serverTextBox.Text);
        IAsyncResult result = request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
    }

    private void ReadWebRequestCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

            using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
            {
                string results = httpwebStreamReader.ReadToEnd();
                loginValue = Parser.ParseLoginValue(results);
            }
            myResponse.Close();
        }
        catch (WebException we)
        {
            //
        }
    }
我现在的问题是,单击按钮后,我需要BeginGetResponse的返回值(此处为loginValue),以继续执行应用程序。
我知道这与异步调用的整个意义背道而驰,但是,有一种方法可以在继续主线程之前等待结果?

不幸的是,您已经回答了自己的问题。在Windows Phone上,无法进行同步web调用

但你真的不需要。如果用户在等待web响应时真的无事可做,请使用进度条(或者更好,使用系统中的全局进度条)创建一个半透明的覆盖层,然后遵守

相反,如果您正在等待来自internet的同步呼叫返回(在移动设备上可能需要很长时间),UI将被锁定,用户会认为应用程序已挂起(从技术上讲,这是正确的)


异步性是你的朋友。玩得漂亮。

您还可以在页面的根框架上覆盖一些矩形,在web调用完成之前可以禁用所有控件。是的。Windows Phone中的所有web调用都是异步的。最好将根帧的
ishitestvisible
设置为false。这将禁用所有触摸事件…您可以将IshitteVisible设置为false,但没有关于发生了什么的视觉指示,应用程序将显示为冻结状态(同样,这也可能是真的)。您需要向用户提供一些反馈,以了解正在发生的事情以及为什么他们不能再与应用程序交互。