WP7 - Быстрое переключение приложений и подключение к Интернету

Пример:

Мое приложение выполняет HTTP-соединение. Если я переключаюсь на главный экран с помощью кнопки «Домой» (быстрое переключение приложений), соединение, которое выполняло мое приложение, отменяется.

Почему?

Есть ли способ избежать этого?


person richardaum    schedule 23.03.2013    source источник
comment
Как вы устанавливаете связь? Большинство классов, таких как HttpWebRequest, будут отменены при деактивации приложения.   -  person msbg    schedule 24.03.2013
comment
Я использую HttpWebRequest. Есть ли способ избежать этого?   -  person richardaum    schedule 24.03.2013


Ответы (2)


К сожалению (или, в зависимости от того, как вы на это смотрите, к счастью, поскольку это экономит заряд батареи), когда приложение деактивируется из-за нажатия кнопки «Домой», большинство HTTP-соединений будут отменены, а большинство операций приостановлено. Этот код взят из этого сообщения в блоге проверит, был ли HttpWebRequest отменен деактивацией приложения (захоронением):

    try
    {
         HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyResultAsync);
    }
    catch (WebException e)
    {
        if (e.Status == WebExceptionStatus.RequestCanceled)
            MessageBox.Show("Looks like your request was interrupted by tombstoning");
        else
        {
            using (HttpWebResponse response = (HttpWebResponse)e.Response)
            {
                MessageBox.Show("I got an http error of: " + response.StatusCode.ToString());
            }
        }
    }

Если вы хотите загрузить/выгрузить файл в фоновом режиме, вы можете взглянуть на этой статьи. Для любых более сложных типов сетевых операций вам не повезло.

person msbg    schedule 25.03.2013

Нет, этого никак не избежать. Когда вы используете Fast-App-Switch, все ваши веб-запросы будут отменены.

Если оно было отменено, вы сможете обнаружить это в исключении, которое вы получаете при возврате в приложение:

catch (WebException webEx)
{
    if (webEx.Status == WebExceptionStatus.RequestCanceled)
    {
        // Retry request
    }
    else
    {
        // Handle other exception 
    }
}

Если в вашем приложении есть другие способы (вручную) отмены запросов, вам также необходимо учитывать их.

person Matt Lacey    schedule 25.03.2013