例外が発生した場合にダイアログが閉じられ、アプリケーションがクラッシュしないように、ダイアログで例外を処理しようとしています。ご覧のとおり、単純な try-catch ブロックを使用しています。
IDialogView dialog = null;
try
{
if (_dialogViewModel == null)
{
dialog = ViewFactory.SomeDialog();
_dialogViewModel = new DialogViewModel(dialog);
_dialogViewModel.LoadData();
}
_dialogViewModel.ShowDialog();
}
catch (Exception ex)
{
if (dialog != null)
dialog.Close();
_dialogViewModel = null;
MessageBox.Show("Sorry, there was an error in the dialog.", "Error",
MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
CanExecute()
この問題は、ボタンのイベント ハンドラでエラーが発生した場合に発生します。エラーは正常にキャッチされましたがMessageBox
、ユーザーに表示するCanExecute()
と、再度実行されるため、エラーが再び発生します。最終的には、アプリケーションのクラッシュにつながります。
いくつかの情報をグーグルで検索しましたが、CanExecute()
イベントハンドラーに例外がないことを確認するように言われました. しかし、このようなことは別の場所で発生する可能性があります。そのため、すべてのメソッドを操作するのではなく、ダイアログ エントリ ポイントですべての例外を単純にキャッチしたいと考えています。
だから、私の質問は次のとおりです。ダイアログを破棄して、例外がキャッチされた後に再び表示されないようにする方法は? Close()
閉じる前にまだ呼び出しているため、機能しませんでしたCanExecute()
。