アプリが Windows によって終了された場合 (たとえば、中断されたが、Windows がメモリを解放する必要があるため、アプリをプリエンプトする場合)、アプリを再起動すると、OnLaunched() イベントが発生し、終了したかどうかをテストできます。 (またはユーザーが単に閉じた):
. . .
if ((args.PreviousExecutionState == ApplicationExecutionState.Terminated) ||
(args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser))
{
}
. . .
終了した場合、最初のページ (異なる場合) ではなく、以前の場所/ページから再開したいと考えています。これどうやってするの?疑似コードは次のようになります。
if (CurrentPage != LastSavedPage)
{
CurrentPage = LastSavedPage;
// or: Frame.Navigate(typeof(LastSavedPage)
}
アップデート
だから、これは私がすべきことに対する私の見解ですが、私はまだ「それについて疑問を持っています」(コメントとそれに続くコードを参照してください)
// OnNavigateTo in each page:
Settings.Values["CurrentPageType"] = this.GetType();
Settings.Values["CurrentPageParam"] = args.Parameter;
//Will the line directly above work even if args.Parameter is empty, or must I do something like:
if (null != args.Parameters)
{
Settings.Values["CurrentPageParam"] = args.Parameter;
}
//OnLaunched in app.xaml.cs
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
if ((localSettings.Values.ContainsKey("CurrentPageType")) &&
(localSettings.Values.ContainsKey("CurrentPageParam")))
{
rootFrame.Navigate((Type)localSettings.Values["CurrentPageType"],
localSettings.Values["CurrentPageParam"]);
}
}
更新 2
このコードで例外が発生します。
ApplicationData.Current.LocalSettings.Values["CurrentPageType"] = this.GetType();
ApplicationData.Current.LocalSettings.Values["CurrentPageParam"] = args.Parameter;
タイプ 'System.Exception' の例外が mscorlib.dll で発生しましたが、ユーザー コードでは処理されませんでした WinRT 情報: アプリケーション データ ストアに書き込まれる値をシリアル化しようとしてエラーが発生しました 追加情報: このタイプのデータはサポートされていません。この例外のハンドラがあれば、プログラムは安全に続行できます。
GetType() の呼び出しに「.ToString()」を追加すると、爆発しません...