1

我写了这段代码:

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)才能继续执行应用程序。我知道这违背了异步调用的全部意义,但是,有一种方法可以在继续主线程之前等待结果吗?

4

1 回答 1

2

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

但你真的不需要。如果您的用户在等待来自网络的响应时确实无事可做,请使用进度条(或者更好,使用系统中的全局进度条尝试)拍打半透明覆盖并遵守。

相比之下,如果您正在等待来自互联网的同步调用返回(在移动设备上可能需要很长时间),UI 将被锁定,用户会认为应用程序已挂起(从技术上讲,这是真的)。

异步是你的朋友。玩得开心。

于 2012-08-18T20:04:25.693 回答