[英]What can cause a .NET process/thread to terminate unexpectedly?
我正在尝试收集.NET进程或线程终止原因的完整列表,即使main()方法由try ... catch子句保护也是如此。
此类原因之一就是Thread.Abort()(除非您调用Thread.ResetAbort)。 您知道更多原因吗?
您的代码无法处理StackOverflowException。
当您有一个无限循环时,通常会发生StackOverflowException,该循环使您的调用堆栈不断增长,直到超出正常的堆栈大小(1MB)。
还有更多无法恢复的例外情况。 ExecutionEngineException似乎是其中之一。
与C / C ++不同,main()并不是应用程序的全部。 因此,即使用try / catch块将main()中的所有代码包围起来,也不会捕获该代码生成的所有异常。
但是,您可以通过侦听Application.ThreadException事件来附加一个函数来处理整个应用程序引发的未处理异常,这将帮助您从应用程序中的任何线程捕获异常,无论该线程是否由代码创建。
例如,您的代码可能会调用外部非托管DLL中的代码。 该代码可能会执行自己的线程,这可能会异步失败,从而引发异常。 该异常属于属于您的应用程序的进程,而不属于您的任何代码。 并且,如果未被捕获,将导致您的程序意外终止。
也许您的线程中发生了未处理的异常,最终导致线程被杀死。 在主线程中有一个try catch子句不会捕获另一个运行线程的异常。
编辑:读/写共享字段中的一些并发访问
网络连接超时。
停电。
用户终止了相关进程。
卸载AppDomain
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.