我有一个使用 MvvmCross 的 WinRT 应用程序,我想在其中存储当前会话状态。
在 App.xaml.cs 的 OnLaunch 方法中,我向暂停管理器注册了我的应用程序的内容框架:
...
var setup = new Setup(_contentFrame);
setup.Initialize();
var suspensionManager = Mvx.GetSingleton<IMvxSuspensionManager>() as MvxSuspensionManager;
suspensionManager.RegisterFrame(_contentFrame, "FrameNav");
...
每当我暂停应用程序并在 OnSuspending 事件处理程序中运行代码时
var suspensionManager = Mvx.GetSingleton<IMvxSuspensionManager>() as MvxSuspensionManager;
await suspensionManager.SaveAsync();
我得到以下异常。
Cirrious.MvvmCross.WindowsStore.Views.Suspension.MvxSuspensionManagerException "MvxSuspensionManager failed"
at Cirrious.MvvmCross.WindowsStore.Views.Suspension.MvxSuspensionManager.<SaveAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at ****App.xaml.cs:line 129
System.Runtime.InteropServices.COMException "Unbekannter Fehler
"
at Windows.UI.Xaml.Controls.Frame.GetNavigationState()
at Cirrious.MvvmCross.WindowsStore.Views.Suspension.MvxSuspensionManager.SaveFrameNavigationState(Frame frame)
at Cirrious.MvvmCross.WindowsStore.Views.Suspension.MvxSuspensionManager.<SaveAsync>d__0.MoveNext()
我很确定我可以将异常根范围缩小到 WinRT API 调用
Frame.GetNavigationState();
由 MvxSuspensionManager 执行。当我直接调用这个函数时,它会失败并出现同样的错误。
我知道只有将非复杂类型用作导航参数时,才能序列化 WinRT 框架导航堆栈。但是即使我只是在第一页暂停,我的应用程序也会崩溃。
也许我用 MvvmCross 挂起的方法是错误的,或者我错过了一些正确设置的步骤。
非常感谢任何帮助!