【问题标题】:System.Runtime.InteropServices.COMException caused while terminating the app终止应用程序时导致 System.Runtime.InteropServices.COMException
【发布时间】:2013-05-24 12:31:29
【问题描述】:

我有一个包含 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();          
    }

它说

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

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

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

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

【问题讨论】:

  • 您是否将参数传递给导航?请注意,您只能传递可序列化的对象。
  • 不。不传递任何参数。我在某个论坛上读到,如果我尝试传递一个复杂的参数,就会发生这种情况。我什至没有写回退函数,因为它是默认的基本页面,因此它包含后退按钮。
  • 所以尝试覆盖 goback 函数并尝试传递一个空字符串。
  • @inxs base.GoBack(sender, e); ??
  • 只是一个常规覆盖。 public void overwrite GoBack(sender, Eventargs)

标签: c# exception windows-8 navigation


【解决方案1】:

问题在于 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();
}

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多