我正在尝试收集 .NET 进程或线程终止原因的完整列表,即使 main() 方法由 try...catch 子句保护。
其中一个原因是 Thread.Abort()(除非您调用 Thread.ResetAbort)。你知道更多的原因吗?
我正在尝试收集 .NET 进程或线程终止原因的完整列表,即使 main() 方法由 try...catch 子句保护。
其中一个原因是 Thread.Abort()(除非您调用 Thread.ResetAbort)。你知道更多的原因吗?
您的代码无法处理 StackOverflowException。
当您有一个无限循环时,通常会发生 StackOverflowException,这让您的调用堆栈增长直到超过通常的堆栈大小 (1MB)。
还有更多您无法恢复的例外情况。ExecutionEngineException似乎就是其中之一。
与 C/C++ 不同,main() 并不是应用程序的全部。因此,即使使用 try/catch 块包围 main() 中的所有代码也不会捕获该代码生成的所有异常。
但是,您可以通过侦听 Application.ThreadException 事件附加一个函数来处理整个应用程序抛出的未处理异常,这将帮助您从应用程序中的任何线程捕获异常,无论它是否由您的代码创建。
例如,您的代码可能会调用外部非托管 DLL 中的代码。该代码可能会执行自己的线程,这可能会异步失败,从而引发异常。该异常属于您的应用程序的进程,但不属于您的任何代码。如果未被捕获,将导致您的程序意外终止。
也许你的线程中发生了一个未处理的异常,最终杀死了线程;在你的主线程中有一个 try catch 子句不会从另一个正在运行的线程中捕获和异常。
编辑:共享字段的读/写中的一些并发访问
网络连接超时。
停电。
用户正在终止相关进程。
卸载 AppDomain