如果在C#中的表单上发生异常,如何正常关闭表单

时间:2011-09-08 18:41:17

标签: c# forms exception-handling

我所处的位置我有一个大型用户应用程序,它有很多表单,我正在寻找一种方法来关闭单个表单,如果由于某个逻辑已经在该表单上捕获而发生了异常。

现在我正在遵循“不要在任何地方写try / catch来捕捉愚蠢的错误”的原则,它确实使我的代码更清晰,但是当我有NullPointerException时会导致整个应用程序崩溃。

最好的解决方案是一个'本地错误处理程序',每个表单都会收集该级别的任何异常,并在那里终止该表单而不是冒泡并终止整个应用程序。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:5)

  

但是当我有NullPointerException时,会导致整个应用程序崩溃。

然后你需要修复NullReferenceException(s),而不是提出一些在全局级别捕获异常的复杂机制,并回溯以找到导致异常的形式。你应该简单地(尝试)设计你的代码,以便不可能发生空引用,或者如果它们这样做,它可以以优雅的方式处理。

如果您有导致崩溃的方案,请修复它,不要忽略它。您如何保证关闭表单会使您的程序现在和将来保持一致状态? (提示:你不能)

答案 1 :(得分:3)

您可以从公共基类派生表单,以便它们可以共享相同的错误处理程序吗?我们有一个基本表单,记录异常,显示错误,然后关闭表单(在调试模式下是可选的)。每个用户事件(例如button_click)都包含在一个调用基本错误处理程序的try / catch中。

此外,如果您不知道,还有全局异常处理程序:

Application.ThreadException event

AppDomain.UnhandledException event

WindowsFormsApplicationBase.UnhandledException event (VB)