MessageDialogのShowAsync()メソッドが散発的に失敗しています。これはかなりそれが動作するかどうかについてのコイン投げます:MessageDialog ShowAsync throwing accessdenied exception
private async Task CloseApp()
{
MessageDialog restartMessage = new MessageDialog("Changes have made a restart necessary.", "App must Restart")
restartMessage.Commands.Add(new UICommand("Close Application", (command) => { Application.Current.Exit(); }));
await restartMessage.ShowAsync(); // Code breaks here
Application.Current.Exit();
}
私はalmost identical problemを持つ別のユーザーを見つけましたが、そのページのすべてのソリューションが発生してから、私のエラーを防ぐために失敗しました。彼らのソリューションは、次のようになります。
private async Task CloseApp()
{
IAsyncOperation<IUICommand> asyncCommand = null;
MessageDialog restartMessage = new MessageDialog("Changes have made a restart necessary.", "App must Restart")
restartMessage.Commands.Add(new UICommand("Close Application", (command) => { Application.Current.Exit(); }));
restartMessage.DefaultCommandIndex = 0;
asyncCommand = restartMessage.ShowAsync(); // Code *still* breaks here
Application.Current.Exit();
}
更新:
問題は別のMessageDialogによって呼び出されるメソッドにMessageDialogにShowAsync()を実行しようとしてから来ることができます。同時に2つのMessageDialogを表示することはできないため、エラーが発生します。ディスパッチャを使用しています
私のソリューションは...実際にはまだ動作しますが、とにかくチラッ持っていません。私は問題がMessageDialog内からMessageDialogを開けたことを考え出したら
MessageDialog restartMessage = new MessageDialog("Changes have made a restart necessary.", "App must Restart");
restartMessage.Commands.Add(new UICommand("Close Application", (command) => { Application.Current.Exit(); }));
CoreDispatcher cD = Window.Current.CoreWindow.Dispatcher;
await cD.RunAsync(CoreDispatcherPriority.Normal, async() =>
{
await restartMessage.ShowAsync();
});
:ここで実装ソリューションを使用することは?私は、第2のものを表示する必要があるかどうかを知るために、最初の結果を必要とすると思います。 – Vincent
私は、CoreDispatherが、最初のメッセージが終了した後に2番目のメッセージが開かれると考えましたが、明らかにそうではありません。レコードについては、最初のメッセージダイアログで唯一、SaveDate()メソッドが呼び出されます。私が使っているこのコードは、何かがうまくいかず、アプリケーションを閉じるためにSaveData()メソッドの内部で呼び出されます。私はrestartMessageを置く前に開いているMessageDialogを強制的に閉じる方法があればこの作業を行うことができますが、それを行う方法はわかりません。 –