我正在尝试收集.NET进程或线程终止的完整列表,即使main()方法由try ... catch子句保护。
一个这样的原因是Thread.Abort()(除非你调用Thread.ResetAbort)。你知道更多的理由吗?
答案 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