2

我有一个包含 2 页 calendar.xaml(起始页)和 historystatistics.xaml 的应用程序。当我导航到历史统计并返回日历然后尝试通过下拉手势终止应用程序时引发错误。上述错误发生在 App.xaml 的 OnSuspending 中的 SaveAsync 函数中。

    private async void OnSuspending(object sender, SuspendingEventArgs e)
    {
        CycleManager cycMan = CycleManager.Instance;
        var deferral = e.SuspendingOperation.GetDeferral();
        //TODO: Save application state and stop any background activity
        if (cycMan.Reset != true)
        {
            await Appname.Common.SuspensionManager.SaveAsync(); // **ERROR**
        }
        deferral.Complete();          
    }

它说

mscorlib.dll 中出现“System.Runtime.InteropServices.COMException”类型的异常,但未在用户代码中处理。

GetNavigationState 不支持对传递给 Frame.Navigate 的参数类型进行序列化。

我哪里错了?我从 xaml 的 historystatistics 页面做了一个简单的导航,就像这样

<Button x:Name="backButton" Click="GoBack" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource BackButtonStyle}"/>
4

1 回答 1

0

问题是 SuspensionManager 使用 Frame.GetNavigationState() 来获取 Frame 的历史记录。然后它尝试将导航历史序列化为字符串,不幸的是它无法知道如何序列化自定义复杂类型。

来自MSDN

注意这些方法使用的序列化格式仅供内部使用。您的应用程序不应对其形成任何依赖关系。此外,此格式仅支持基本类型(如字符串、字符、数字和 GUID 类型)的序列化。

此问题的最佳解决方案是重写 NavigationParameter,或者如果您不想保存应用程序状态,只需注释以下行:

private async void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    //await SuspensionManager.SaveAsync();
    deferral.Complete();
}
于 2014-07-09T12:51:53.800 回答