1

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

4

1 回答 1

1

正如您在 google 上发现的那样,您应该确保CanExecute处理程序 a) 轻量级并且 b) 从不抛出异常。您遇到的主要原因是:aCanExecute将由框架自动重复运行。它会在焦点发生变化、输入事件、数据绑定发生变化以及响应您几乎无法控制的许多其他原因时运行。

问题是:您确实有错误,并且该错误反复发生。这意味着您可以在崩溃或重复显示对话框之间进行选择。或者,您可以对错误采取一些措施。

你的答案:修复错误。

(您的处理程序对于您的其他错误很好。把它留在那里。但是这个特定的错误,您需要立即修复。)

于 2012-08-09T08:52:36.017 回答