当我通过我的应用程序发送http请求时,我的应用程序UI在等待http响应时冻结。
为什么会这样?
async void HttpAction()
{
var request = HttpWebRequest.Create(url);
request.Method = "GET";
request.Timeout = 1500;
await Task.Delay(500);
using (HttpWebResponse reponse = request.GetResponse() as HttpWebResponse)
{
if (reponse.StatusCode == HttpStatusCode.OK)
{
//UI action
reponse.Close();
}
}
非常感谢!
答案 0 :(得分:1)
您需要在调用点等待HttpAction
方法。首先阅读此Async/Await article,以更好地理解异步编程。
“异步任务”内部不应有任何UI操作,而应将结果返回到调用点,然后执行必要的操作。
async Task<bool> GetHttpAsyncStatus()
{
var request = HttpWebRequest.Create(url);
request.Method = "GET";
request.Timeout = 1500;
using (HttpWebResponse reponse = await request.GetResponseAsync() as HttpWebResponse)
{
if (reponse.StatusCode == HttpStatusCode.OK)
{
// no UI Action, just return the result
reponse.Close();
return true;
}
return false;
}
}
此调用必须为
bool requestStatus = await GetHttpAsyncStatus();
答案 1 :(得分:0)
您需要使用AsyncTask
并在doInBackground方法中运行http调用。
在onPostExecute
方法中,您将更新ui。 AsyncTask不会非常麻烦,它将释放ui线程。我在异步方面没有太多经验,但是AsyncTask和HttpurlConnection从未使我在更棘手的问题上失败。