3

我正在编写一个 Windows 8 XAML/C# 应用程序,但会话管理器有点问题。

在我的 App.xaml.cs 中,我的 OnSuspending 方法如下所示:

    private async void OnSuspending(object sender, SuspendingEventArgs e)
    {
        var deferral = e.SuspendingOperation.GetDeferral();
        //TODO: Save application state and stop any background activity
        await SuspensionManager.SaveAsync();
        deferral.Complete();
    }

我已经在 App.xaml.cs 的 OnLaunched 方法中使用 SuspensionManager 注册了我的 rootFrame:

SuspensionManager.RegisterFrame(rootFrame, "AppFrame");

因此,在我的应用程序的第一页中,我重写了 SaveState 方法。它看起来像这样:

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

        base.SaveState(pageState);
    }

当应用程序被挂起时,这个方法被调用并且一切正常。

我有一个与第一页相同的 SaveState 方法的第二页(如上所述)。

当我从第一页导航到第二页并暂停应用程序时,没有调用任何 SaveState 方法并且应用程序崩溃并出现以下错误:

SuspensionManager 失败:未指定的错误

杰出的!!里面信息不多!!

那么,我需要对具有多个页面的 SuspensionManager 做任何不同的事情吗?

提前致谢

4

1 回答 1

2

SuspensionManager 管理器可以处理多个页面 - 没有问题。鉴于上下文很少,我建议如下:

  1. 您是否对使用网格应用模板创建 vs 项目时自动生成的常用文件进行了任何更改?如果是 - 尝试创建一个新项目。
  2. 您是否在 frame.navigate 调用中传递了任何不可序列化的参数?这是不太可能的,因为在这种情况下 - 您可以在输出窗口中看到类似这样的内容 - WinRT 信息:GetNavigationState 不支持传递给 Frame.Navigate 的参数类型的序列化。
于 2013-04-05T12:40:04.763 回答