我正在使用try catch,但它仍然在WPF应用程序中抛出错误

本文关键字:应用程序 WPF 错误 出错 try catch | 更新日期: 2023-09-27 17:52:48

页面构造函数代码

public DebitNoteCreation(int transactionID) :
        this()
    {
        try
        {
            InsertDebitNote dn = new InsertDebitNote();
            dn.Load(transactionID);
            this.DataContext = dn;
        }
        catch (Exception)
        {
            MessageBox.Show("Some of the entries for this transaction are empty so kindly complete them", "Error");
        }
        this.NavigationService.Navigate(new Uri("DisplayTransaction.xaml", UriKind.Relative));
    }

错误信息

对象引用未设置为对象的实例。

我可以看到消息框,但在我点击ok按钮后,它抛出了上面写的错误。

我正在使用try catch,但它仍然在WPF应用程序中抛出错误

由于在单击OK之后发生错误,因此我期望 this.NavigationServicenull,因为构造函数失败。

同样,你不应该假设Exception意味着"这个事务的一些条目是空的,所以请完成它们",并且允许构造函数在明显无法完全初始化对象时成功是非常危险的。

事实上,只有 UI应该做消息框无论如何。我会重新编写,以便在检查事务后抛出已知异常(即您期望的问题场景)。让UI捕获那个异常并处理消息框

如果抛出异常并显示消息框,则表明出了问题…你不会给this.DataContext分配任何东西。这很可能导致后续错误。

查看NullReferenceException的堆栈跟踪,看看到底是什么抛出了,但基本上你试图继续使用未完全初始化的对象,这很少是一个好主意。

(请注意,您可能应该捕获一个更具体的异常,并且您肯定应该记录它,而不是仅仅显示一个消息框,然后忽略它。)

如果你要继续,设置上下文为空注释或类似的东西。我怀疑在这种情况下你并不想显示页面。您可能需要考虑在构造页面之前加载事务,以使事情更简洁。