WinRT/UWP приостанавливает работу при отключении питания?

Я пытаюсь сохранить данные перед закрытием/переходом/свертыванием приложения (WinRT 8.1) (или выключением/перезапуском Windows на планшете с WIN10), используя событие приостановки приложения.

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/suspend-an-app

Тем не менее, он не работает при выключении / выключении питания WinRT / UWP: происходит ли приостановка действия при длительном удерживании кнопки выключения питания?


person smixik    schedule 18.04.2018    source источник
comment
Добро пожаловать в СО. Пожалуйста, посмотрите здесь, чтобы узнать, как улучшить свои вопросы (форматирование, корректура, предоставление кода и т. д.): stackoverflow.com/help /как спросить   -  person petezurich    schedule 18.04.2018


Ответы (2)


Активируется ли действие приостановки при длительном удерживании кнопки выключения питания?

Система принудительно выключится при длительном нажатии кнопки выключения питания. И система не смогла убедиться, что Current user session завершено. Таким образом, обработчик событий приостановки не мог быть вызван правильно.

Из жизненный цикл приложения универсальной платформы Windows (UWP) для Windows 10< /а>:

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

Итак, перед закрытием приложение все еще находилось в папке Current user session. И Suspended будет вызываться при выключении питания (выключении).

Обратите внимание, что вы не можете протестировать его в модели отладки в Visual Studio. Потому что, когда вы выключите систему, Visual Studio сначала выйдет из модели degbug. Событие Suspended не будет вызвано, как ожидается. Вы можете проверить с помощью следующего кода.

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var stringBulider = new StringBuilder();
    var deferral = e.SuspendingOperation.GetDeferral();

    Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
    Object value = localSettings.Values["exampleSetting"];
    stringBulider.Append(value.ToString() + "/Next");
    localSettings.Values["exampleSetting"] = stringBulider.ToString();

    deferral.Complete();
}

Каждый раз, когда вы отключаетесь, stringBulider будут добавляться по одному.

person Nico Zhu - MSFT    schedule 19.04.2018

Событие жизненного цикла Suspending сработает в случае нормального завершения работы ОС — если вы выполните Start -> Shut down.

К сожалению, это не относится к длительному удержанию кнопки выключения питания и нажатию кнопки перезагрузки, потому что оба эти способа являются неправильными способами выключения вашего ПК. Удерживание кнопки питания для выключения, по сути, внезапно "выключает питание" для ПК, что означает, что ОС не может реагировать на это, и все несохраненные данные теряются. Этот метод выключения ПК следует использовать только тогда, когда происходит что-то совсем плохое и все зависает. Вот почему в этом случае у приложения UWP нет возможности запустить обработчик события приостановки.

person Martin Zikmund    schedule 19.04.2018