我正在使用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按钮后,它抛出了上面写的错误。
由于在单击OK之后发生错误,因此我期望 this.NavigationService
是null
,因为构造函数失败。
同样,你不应该假设Exception
意味着"这个事务的一些条目是空的,所以请完成它们",并且允许构造函数在明显无法完全初始化对象时成功是非常危险的。
事实上,只有 UI应该做消息框无论如何。我会重新编写,以便在检查事务后抛出已知异常(即您期望的问题场景)。让UI捕获那个异常并处理消息框
如果抛出异常并显示消息框,则表明出了问题…你不会给this.DataContext
分配任何东西。这很可能导致后续错误。
查看NullReferenceException
的堆栈跟踪,看看到底是什么抛出了,但基本上你试图继续使用未完全初始化的对象,这很少是一个好主意。
(请注意,您可能应该捕获一个更具体的异常,并且您肯定应该记录它,而不是仅仅显示一个消息框,然后忽略它。)
如果你有要继续,设置上下文为空注释或类似的东西。我怀疑在这种情况下你并不想显示页面。您可能需要考虑在构造页面之前加载事务,以使事情更简洁。