是否可以尝试/捕获整个C#程序?

时间:2009-10-21 14:52:41

标签: c# exception-handling try-catch

C#程序由以下人员调用:

Application.Run (new formClass ());

我想在整个过程中尝试使用try / catch来捕获任何未捕获的异常。当我把它放在这个Run方法时,不会捕获异常;当程序在未捕获的异常之后终止时,控制仅返回此处。

在哪里可以使用try / catch来覆盖整个程序?谢谢!

2 个答案:

答案 0 :(得分:37)

捕获Windows Form的未处理异常连接 AppDomain.UnhandledExceptionApplication.ThreadException事件。

感兴趣:Unexpected Errors in Managed Applications

答案 1 :(得分:8)

基本上,在使用默认CLR托管过程时,您无法捕获所有异常。期。这是因为AppDomain.UnhandledException事件只是一个通知,您无法处理异常(这意味着您无法阻止在处理通知后终止应用程序)。

但是,您可以使用其Application.ThreadException处理程序(以及control the behavior通过UnhandledExceptionMode)来捕获并处理WinForms应用程序的UI线程中的所有异常。引发异常的其他线程将不会被此处理程序捕获。

一般来说,尝试处理所有异常并不是一个好主意。但是,您可以使用 AppDomain.UnhandledException记录错误和/或执行重要的清理任务(例如,关闭基于文件的数据库或其他任何内容)。