2016-07-05 6 views
0

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(); 
}); 
+0

:ここで実装ソリューションを使用することは?私は、第2のものを表示する必要があるかどうかを知るために、最初の結果を必要とすると思います。 – Vincent

+0

私は、CoreDispatherが、最初のメッセージが終了した後に2番目のメッセージが開かれると考えましたが、明らかにそうではありません。レコードについては、最初のメッセージダイアログで唯一、SaveDate()メソッドが呼び出されます。私が使っているこのコードは、何かがうまくいかず、アプリケーションを閉じるためにSaveData()メソッドの内部で呼び出されます。私はrestartMessageを置く前に開いているMessageDialogを強制的に閉じる方法があればこの作業を行うことができますが、それを行う方法はわかりません。 –

答えて

関連する問題