WinRT / UWP是否暂停上电?

时间:2018-04-18 09:58:36

标签: button uwp windows-runtime action suspend

我正在尝试使用应用程序暂停事件在应用程序(WinRT 8.1)关闭/睡眠/最小化(或使用WIN10的平板电脑中关闭/重启Windows)之前保存数据。

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

然而,它没有关闭电源关闭/关闭WinRT / UWP:暂停动作是否在长时间关机按钮保持时上升?

2 个答案:

答案 0 :(得分:1)

Suspending生命周期事件将在操作系统正常关闭时触发 - 如果您执行Start -> Shut down

遗憾的是,长按电源按钮保持和按下重启按钮不是这种情况,因为这两种情况都是关闭 PC的不正确方法。按住电源按钮基本上突然"切断电源" 到PC,这意味着操作系统无法响应此操作,所有未保存的数据都将丢失。这种关闭PC的方法只应在发生严重事故并且一切都冻结的时候使用。这就是为什么在这种情况下UWP应用程序没有机会运行挂起事件处理程序。

答案 1 :(得分:0)

  

长时间断电按钮保持暂停动作是否上升?

长按电源关闭按钮,系统将强行关闭。并且系统无法确保Current user session完成。因此无法正确调用挂起事件处理程序。

来自Windows 10 universal Windows platform (UWP) app lifecycle

  

当前用户会话基于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都会一次追加一个。