我正在尝试使用应用程序暂停事件在应用程序(WinRT 8.1)关闭/睡眠/最小化(或使用WIN10的平板电脑中关闭/重启Windows)之前保存数据。
https://docs.microsoft.com/en-us/windows/uwp/launch-resume/suspend-an-app
然而,它没有关闭电源关闭/关闭WinRT / UWP:暂停动作是否在长时间关机按钮保持时上升?
答案 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
都会一次追加一个。