5

我编写了一个 Windows 8 商店应用程序 (XAML/C#),我在 Microsoft Surface 上运行它。该应用程序基本上是一个没有任何保存按钮的数据输入应用程序。在页面之间跳转或应用程序暂停时会自动执行保存。

但是,我似乎无法捕捉到的一种情况是用户关闭应用程序时(当用户从​​屏幕的顶部滑动到底部时)。

所以目前我订阅了 App.Current.Suspending 并在这里调用 save :

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);
}

但是当应用程序关闭时,这些方法都不会被调用。

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

谢谢

4

2 回答 2

6

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

在底部,它包含以下注释:

关于使用 Visual Studio 进行调试的说明:Visual Studio 阻止 Windows 挂起附加到调试器的应用。这是为了允许用户在应用程序运行时查看 Visual Studio 调试 UI。调试应用时,可以使用 Visual Studio 向其发送挂起事件。确保显示调试位置工具栏,然后单击挂起图标。

于 2013-04-23T11:35:41.333 回答
2

我讨厌简单地指出有关 Windows 应用商店应用程序生命周期的文档,但文档非常清楚。当通过按 ALT-F4 关闭应用程序时,没有处理任何特殊事件 Windows Store 应用程序假定只是暂停或根本不运行。这意味着您应该经常处理保存用户数据和/或提供保存此类数据的方法。

没有特殊事件表明用户已关闭应用程序。用户关闭应用程序后,它会暂停并终止,在大约 10 秒内进入 NotRunning 状态。如果一个应用已经为 Suspending | 注册了一个事件处理程序。挂起事件,当应用程序挂起时调用。您可以使用此事件处理程序将相关的应用程序和用户数据保存到持久存储中。

您应该决定您的应用在被用户关闭后激活时的行为方式。应用程序是由 Windows 还是由用户终止可能对您没有任何影响。如果您的应用在用户关闭时与 Windows 关闭时需要执行不同的操作,则激活事件处理程序可以确定应用是由用户终止还是由 Windows 终止。请参阅 ApplicationExecutionState 枚举的文档中对 ClosedByUser 和 Terminated 状态的描述。

除非绝对必要,否则应用程序不应以编程方式自行关闭。例如,如果一个应用程序检测到内存泄漏,它可以自行关闭以确保用户个人数据的安全。当您以编程方式关闭应用程序时,Windows 会将其视为应用程序崩溃。

资源

于 2013-04-23T13:33:13.367 回答