現在のセッション状態を保存する 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 でサスペンドする私のアプローチが間違っているか、正しくセットアップするためのいくつかの手順を逃したのかもしれません。
どんな助けでも大歓迎です!