WP8 Fast App Resume с асинхронными методами

В моем приложении для 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\"");
    }

Пользователь просто щелкает меню, которое открывает страницу уведомлений, а затем мгновенно нажимает кнопку запуска телефона, чтобы деактивировать приложение. Когда пользователь щелкнет плитку приложения в меню «Пуск», будет выдано исключение.

Любое решение? будет ли работать деактивация определения режима ожидания?


person LojiSmith    schedule 13.03.2014    source источник


Ответы (1)


Вероятно, это было бы не лучшим решением, но можно не отменять асинхронный запрос, добавив эту строку кода в метод InitalizePhoneApplication () на странице app.xaml.cs.

PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;

Подробнее об этом свойстве здесь
Протестируйте, это должно решить проблему, но я не претендую на то, чтобы это сделать ....

person Paul Martinez    schedule 13.03.2014
comment
нет, это не сработало, я думаю, вы принимаете это по-другому - person LojiSmith; 16.03.2014