我正在尝试处理对话框中的异常,以便如果发生任何异常,对话框将关闭并且应用程序不会崩溃。如您所见,我使用了一个简单的 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()
.