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,但没有关于发生了什么的视觉指示,应用程序将显示为冻结状态(同样,这也可能是真的)。您需要向用户提供一些反馈,以了解正在发生的事情以及为什么他们不能再与应用程序交互。