Быстрое возобновление работы приложения WP8 с асинхронными методами
В моем приложении Windows Phone 8 я использую асинхронные методы для получения данных с сервера.
После реализации Fast App Resume
функциональность еще одна проблема встала для меня. Асинхронный метод, который получает данные с сервера, генерирует исключение типа System.Net.WebException
когда это возобновится.
Чтобы воспроизвести проблему, достаточно нажать кнопку запуска, когда приложение загружает данные асинхронным способом.
Например, у меня есть страница, которая загружает уведомление пользователя. Я позвонил async void GetNotifications()
метод, который далее вызывает метод ниже, чтобы получить строку ответа.
public async Task<string> Get(string URL)
{
var request = WebRequest.Create(new Uri(URL)) as HttpWebRequest;
if (APIHelper.APIHandshake != null)
request.Headers["Cookie"] = "ii=" + APIHelper.APIHandshake.Sid + ";";
return await httpRequest(request);
}
реализация метода httprequest приведена ниже.
private async Task<string> httpRequest(HttpWebRequest request)
{
string received;
using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory
.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
{
using (var responseStream = response.GetResponseStream())
{
using (var sr = new StreamReader(responseStream))
{
//cookieJar = request.CookieContainer;
//responseCookies = response.Cookies;
received = await sr.ReadToEndAsync();
}
}
}
return received.Replace("[{}]", "[]")
.Replace("[{},{}]", "[]")
.Replace("\"subcat_id\":\"\"", "\"subcat_id\":\"0\"");
}
Пользователь просто щелкает меню, которое открывает страницу уведомлений, а затем мгновенно нажимает кнопку запуска телефона, чтобы деактивировать приложение. Когда пользователь нажимает на плитку приложения из меню "Пуск", генерируется исключение.
Любое решение? будет работать деактивация обнаружения в режиме ожидания?
1 ответ
Возможно, это не лучшее решение, но можно не отменить асинхронный запрос, добавив эту строку кода в метод InitalizePhoneApplication() на странице app.xaml.cs.
PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;
Узнайте больше об этой собственности здесь
Проверьте это, это должно решить проблему, но я не притворяюсь, что это лучшее, что нужно сделать....