まず、エラーなしで実行されますが、必要なすべてをカバーしていないコードから:
public async Task SaveData()
{
// MessageDialog restartMessage;
// ^^ This was made global and is defined in SafeToSave()
// Check if it's safe to save
await SafeToSave();
if (restartMessage != null)
{
CoreDispatcher cD = Window.Current.CoreWindow.Dispatcher;
await cD.RunAsync(CoreDispatcherPriority.Normal, async () =>
{
await restartMessage.ShowAsync();
// This WILL invoke 'Application.Current.Exit()'
});
return;
// Issue is right around here...
}
// Other code...
}
基本的な前提は、保存するのが安全でない場合、メッセージ ダイアログがユーザーにアプリを再起動する必要があることを通知し、[OK] ボタンをタップすると、'Application.Current.Exit()' を実行することです。
私の問題は、再起動がヒットしたときにコードの実行を停止する必要があることです。現在、「return」はこのメソッドを終了するだけですが、その後、restartMessage が有効になるまで SaveData() を呼び出したメソッドで他のことを続けますが、これは良くありません。
「Application.Current.Exit()」を「return」ステートメントの上に置くことを検討しましたが、エラー メッセージが表示される前にシャットダウンしてしまいます。これも良くありません。
もう 1 つの解決策は、CoreDispatcher 全体をスキップし、ShowAsync() を単独で実行することでした。ただし、別の既知のエラーが発生する場合を除きます。基本的に、SaveData() メソッドを呼び出すいくつかの MessageDialogs があり、別の MessageDialog が既に開いているときに MessageDialog を開くのは、やはり良くありません。
それだけです。アプリケーション全体を強制終了したり、エラー メッセージの表示を妨げたりすることなく、コード フォームの実行を停止する何かが必要です。私に何ができる?