关闭Windows 8商店应用程序时保存数据

5
我已经编写了一个Windows 8应用程序(XAML/C#),并在Microsoft Surface上运行。该应用程序基本上是一个数据输入应用程序,没有任何保存按钮。当跳转页面或应用程序被挂起时,自动执行保存操作。
然而,有一种情况我似乎无法捕捉到,那就是用户关闭应用程序(当用户从屏幕顶部向下滑动时)。
因此,目前我订阅了App.Current.Suspending事件,并在此处调用保存:
App.Current.Suspending += Current_Suspending;                  

void Current_Suspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
{
    Save();
}

我还覆盖了SaveState方法并在此处调用Save:

protected override void SaveState(Dictionary<string, object> pageState)
{
    Save();
    base.SaveState(pageState);
}

但是这两种方法在应用程序关闭时都不会被调用。

有人知道在应用关闭时触发的事件吗?

谢谢。


你在谈论应用程序被挂起时使用“closed”一词有点令人困惑。你能确定是否实际发生了Suspending事件,如果没有,那么你没有以正确的方式钩入事件。这篇文章似乎可以帮助你以正确的方式做到这一点:http://msdn.microsoft.com/en-us/library/windows/apps/hh986968.aspx - Security Hound
1
当应用程序被暂停时,挂起事件将触发,但当它被关闭时不会触发。当我说“关闭”时,我的意思是用户从屏幕顶部向下滑动(或按下Alt-F4)。 - Sun
您的暂停事件仅在应用程序被暂停,而非关闭时发生。您需要通过处理应用程序关闭时发生的事件来实际永久关闭应用程序。 - Security Hound
1
我调查了这个问题,没有问题 - Security Hound
2个回答

6

http://msdn.microsoft.com/en-US/library/windows/apps/xaml/hh465115.aspx

底部包含以下注意事项:

关于使用Visual Studio进行调试的注意事项:当应用程序被附加到调试器时,Visual Studio会阻止Windows暂停应用程序。这是为了让用户在应用程序运行时查看Visual Studio调试界面。在调试应用程序时,您可以使用Visual Studio向其发送挂起事件。确保显示了“调试位置”工具栏,然后单击“挂起”图标。


3
我不想简单地指向 Windows 应用程序生命周期文档,但该文档非常清晰。没有特殊的事件可以处理通过按下 ALT-F4 关闭应用程序的操作,Windows 应用程序只能被挂起或者停止运行。这意味着你应该经常保存用户的数据和/或提供一种保存此类数据的方法。
没有特殊事件可以指示用户已关闭应用程序。当用户关闭应用程序后,它会被挂起和终止,在大约10秒钟内进入未运行状态。如果应用程序已为 Suspending | suspending 事件注册了事件处理程序,则在应用程序挂起时调用该处理程序。您可以使用此事件处理程序将相关的应用程序和用户数据保存到持久存储中。
您应该决定您的应用程序在被用户关闭后如何行为。对于您来说,应用程序是由Windows还是由用户终止可能没有区别。如果您的应用程序需要在被用户关闭时执行与被Windows关闭时不同的操作,则激活事件处理程序可以确定应用程序是由用户还是由Windows终止。请参阅 ApplicationExecutionState 枚举文档中 ClosedByUser 和 Terminated 状态的描述。
应用程序不应该以编程方式自行关闭,除非绝对必要。例如,如果应用程序检测到内存泄漏,它可以关闭自身以确保用户个人数据的安全性。当您以编程方式关闭应用程序时,Windows 将其视为应用程序崩溃。

来源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接