Подтвердить что ты не робот

Событие приостановки, не использующее 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 не работает.

Любые идеи?

4b9b3361

Ответ 1

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

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

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

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

enter image description here