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 メソッドを持つ 2 番目のページがあります (上記のように)。

最初のページから 2 番目のページに移動してアプリケーションを一時停止すると、どちらの SaveState メソッドも呼び出されず、次のエラーでアプリケーションがクラッシュします。

SuspensionManager が失敗しました: 不明なエラー

素晴らしい!!あまり情報がありません!!

では、複数のページを持つ SuspensionManager で何か違うことをする必要がありますか?

前もって感謝します

4

1 に答える 1

2

SuspensionManager マネージャーは複数のページで動作します - 問題ありません。少しの文脈を考えると、私は次のことをお勧めします:

  1. グリッド アプリ テンプレートを使用して vs プロジェクトを作成するときに自動生成される共通ファイルに変更を加えましたか? はいの場合 - 新しいプロジェクトを作成してみてください。
  2. frame.navigate 呼び出しでシリアル化できないパラメーターを渡していますか? その場合、出力ウィンドウに次のようなものが表示されるため、可能性は低いです。WinRT 情報: GetNavigationState は、Frame.Navigate に渡されたパラメーター型のシリアル化をサポートしていません。
于 2013-04-05T12:40:04.763 に答える