【问题标题】:WinRT/UWP is suspending rising on power off?WinRT/UWP 是否在断电时暂停上升?
【发布时间】:2018-09-28 12:28:56
【问题描述】:

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

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

但是,它在关机/关机时无法工作 WinRT/UWP:长时间按住关机按钮时暂停动作是否上升?

【问题讨论】:

标签: button uwp windows-runtime action suspend


【解决方案1】:

长时间按住关机按钮会导致暂停动作上升吗?

长按关机键,系统会强制关机。并且系统无法确保Current user session 已完成。因此无法正确调用挂起事件处理程序。

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

当前用户会话基于 Windows 登录。只要当前用户尚未注销、关闭或重新启动 Windows,当前用户会话就会在锁屏身份验证、切换用户等事件中持续存在。

所以,在关闭之前,应用程序仍然在Current user session。并且Suspended 将在关机(关机)时被调用。

注意,您不能在 Visual Studio 的调试模型中对其进行测试。因为当你关闭系统时,Visual Studio 会首先退出调试模型。 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 将一次追加一个。

【讨论】:

    【解决方案2】:

    Suspending 生命周期事件将在操作系统正常关闭的情况下触发 - 如果您这样做 Start -> Shut down

    很遗憾,长时间按住关机按钮和按下重新启动按钮的情况并非如此,因为这两种方法都是关闭电脑的不正确方法。按住电源按钮关闭基本上是突然“切断电源”到 PC,这意味着操作系统无法对此做出响应,并且所有未保存的数据都将丢失。这种关闭电脑的方法应该只在真正糟糕的事情发生并且一切都冻结时才使用。这就是 UWP 应用在这种情况下没有机会运行挂起事件处理程序的原因。

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2015-09-10
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      相关资源
      最近更新 更多