Приостановка события, не вызывающего с помощью WinRT

У меня проблема с приостановкой события на Windows Phone 8.1 с использованием WinRT, он не срабатывает. Не знаю почему. Это мой код:

/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
    InitializeComponent();

    Suspending += OnSuspending;
#if DEBUG
    this.displayRequest = new DisplayRequest();
#endif
}

/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">
/// The source of the suspend request.
/// </param>
/// <param name="e">
/// Details about the suspend request.
/// </param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    deferral.Complete();
}

Я установил точку останова в строке var deferral = e.SuspendingOperation.GetDeferral(); и отладил ее с помощью Visual Studio. Затем я нажал кнопку запуска на своем телефоне, запустил другое приложение и подождал около 10 секунд. OnSuspending не работает.

Любые идеи?


person UltimaWeapon    schedule 08.06.2014    source источник


Ответы (1)


Событие приостановки не сработает во время отладки (но при нормальном запуске приложения оно сработает сразу после того, как вы уйдете от приложения), как также сказано на этот блог:

... вы будете вечно ждать, пока они сработают, даже если ваше приложение переключается назад и вперед на экран! Причина проста: пока приложение отлаживается, Windows не приостанавливает его.

Обратите внимание, что это может привести к некоторому странному поведению приложения, когда что-то не так в событии Suspending - например, если вы передаете какой-то сложный класс в метод Frame.Navigate и используете SuspensionManager. Во время отладки ваше приложение будет работать нормально (без приостановки), но выйдет из строя без режима отладки.

Чтобы проверить, как ведет себя ваше приложение, вам нужно будет вызвать мануал Приостановить, открыть (или установить видимую) панель инструментов Местоположение отладки в Visual Studio, там вы найдете раскрывающийся список событий Lifecyce, выберите там Suspend, а затем для возврата приложения - Resume.

введите описание изображения здесь

person Romasz    schedule 08.06.2014
comment
Не могли бы вы предоставить ссылку для подтверждения? - person CAMOBAP; 24.11.2014
comment
@CAMOBAP Доказательная ссылка на что? - person Romasz; 24.11.2014
comment
Доказательная ссылка для утверждения Событие приостановки не сработает во время отладки (если оно существует) - person CAMOBAP; 24.11.2014
comment
@CAMOBAP Я не уверен, почему вы хотите, чтобы я показал вам доказательную ссылку - ее было нетрудно найти, поэтому вот она - Блог MSDN -› «Как отлаживать события жизненного цикла процесса», в нем говорится: Если вы хотите отладить код из предыдущих разделов, установив точку останова в каждом обработчике и нажав F5, чтобы запустить отладчик в Visual Studio, вы будете вечно ждать, пока они сработают, даже если ваше приложение переключается назад и вперед на экран! Причина проста: пока приложение отлаживается, Windows не приостанавливает его. - person Romasz; 24.11.2014
comment
Мне потребовались часы, чтобы найти этот маленький золотой самородок. TBF Я действительно не знал, что искал - симптомы, которые у меня были (и то, что я искал в Google), были сбоями приложения Windows Phone, но не в режиме отладки - возможно, оставление этого комментария поможет Google связать этот отличный ответ для другие люди гуглили то же самое. Этот ответ не решает проблему, но помогает идентифицировать проблему. - person Percy; 13.04.2015
comment
@Rick Спасибо за комментарий, я немного отредактировал ответ, так что, возможно, это поможет сэкономить несколько часов другим людям. Вроде бы довольно частая проблема, особенно связанная с навигацией. - person Romasz; 13.04.2015