这个问题已经在这里有了答案 :
7年前关闭。
可能的重复: .NET- 实现“捕获所有异常处理程序”的最佳方法是什么
我有一个.NET控制台应用程序,它崩溃了并向用户显示一条消息。我所有的代码都在一个try{<code>} catch(Exception e){<stuff>}块中,但是仍然偶尔会显示错误。
try{<code>} catch(Exception e){<stuff>}
在Win32应用程序中,您可以通过安装各种异常处理程序来捕获所有可能的异常/崩溃:
/* C++ exc handlers */ _set_se_translator SetUnhandledExceptionFilter _set_purecall_handler set_terminate set_unexpected _set_invalid_parameter_handler
.NET世界中等效的东西是什么,因此我可以处理/记录/安静所有可能的错误情况?
与其他人发布的内容相反,捕获所有异常没有错。重要的是要妥善处理它们。如果您有堆栈溢出或内存不足的情况,则应用程序应为它们关闭。另外,请记住,OOM条件会阻止您的异常处理程序正确运行。例如,如果您的异常处理程序显示一个带有异常消息的对话框,则如果您内存不足,则对话框显示的空间可能不足。最好将其记录并立即关闭。
就像其他人提到的那样,您可以处理UnhandledException和ThreadException事件,以收集可能会错过的异常。然后只需在您的主循环中抛出一个异常处理程序(假设有一个winforms应用程序)。
另外,您应该注意,并非总是因内存不足而抛出OutOfMemoryExceptions。一个OOM条件可以触发代码中或框架中的各种异常,这些异常与真正的基础条件已耗尽内存这一事实没有任何关系。当根本原因实际上是内存不足时,我经常会看到InvalidOperationException或ArgumentException。