我写了这段代码:
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)继续执行应用程序。 我知道这是违反整个异步调用的意思,但是,有一种方法可以在继续使用主线程之前等待结果吗?
答案 0 :(得分:2)
很遗憾,您已经回答了自己的问题。在Windows Phone上,无法进行同步Web呼叫。
但你真的不需要。如果您的用户在等待来自网络的响应时确实没有做任何事情,请使用进度条拍摄半透明覆盖图(甚至更好,使用系统中的全局进度条)并遵守。
相比之下,如果您正在等待来自互联网的同步呼叫返回(在移动设备上可能需要很长时间),UI将被锁定并且用户会认为应用程序已挂起(技术上,是真的)。
Asynchronicity是你的朋友。玩得很好。