什么可能导致.NET进程/线程意外终止?

时间:2009-01-13 09:01:44

标签: .net multithreading process terminate abort

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

一个这样的原因是Thread.Abort()(除非你调用Thread.ResetAbort)。你知道更多的理由吗?

5 个答案:

答案 0 :(得分:4)

您的代码无法处理StackOverflowException。

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

网络连接超时。

停电。

用户杀死相关进程。

答案 4 :(得分:0)

卸载AppDomain