0

我正在尝试收集 .NET 进程或线程终止原因的完整列表,即使 main() 方法由 try...catch 子句保护。

其中一个原因是 Thread.Abort()(除非您调用 Thread.ResetAbort)。你知道更多的原因吗?

4

5 回答 5

4

您的代码无法处理 StackOverflowException。

当您有一个无限循环时,通常会发生 StackOverflowException,这让您的调用堆栈增长直到超过通常的堆栈大小 (1MB)。

还有更多您无法恢复的例外情况。ExecutionEngineException似乎就是其中之一。

于 2009-01-13T09:12:11.283 回答
1

与 C/C++ 不同,main() 并不是应用程序的全部。因此,即使使用 try/catch 块包围 main() 中的所有代码也不会捕获该代码生成的所有异常。

但是,您可以通过侦听 Application.ThreadException 事件附加一个函数来处理整个应用程序抛出的未处理异常,这将帮助您从应用程序中的任何线程捕获异常,无论它是否由您的代码创建。

例如,您的代码可能会调用外部非托管 DLL 中的代码。该代码可能会执行自己的线程,这可能会异步失败,从而引发异常。该异常属于您的应用程序的进程,但不属于您的任何代码。如果未被捕获,将导致您的程序意外终止。

于 2009-01-13T09:15:59.450 回答
0

也许你的线程中发生了一个未处理的异常,最终杀死了线程;在你的主线程中有一个 try catch 子句不会从另一个正在运行的线程中捕获和异常。

编辑:共享字段的读/写中的一些并发访问

于 2009-01-13T09:06:32.137 回答
0

网络连接超时。

停电。

用户正在终止相关进程。

于 2009-01-13T09:07:26.423 回答
0

卸载 AppDomain

于 2009-01-13T09:24:43.813 回答