C# 是什么导致未处理的ExceptionEventargs.IsTerminating标志为true或false?
订阅C# 是什么导致未处理的ExceptionEventargs.IsTerminating标志为true或false?,c#,.net,clr,C#,.net,Clr,订阅AppDomain.CurrentDomain.UnhandledException上的事件时什么条件导致UnhandledExceptionEventTargets注册标志为真?即,是什么导致异常被认为是致命的 是否默认情况下,除非另行配置,否则所有未处理的异常都将是致命的?否,来自另一个应用程序生成的托管线程的未处理异常的注册终止将等于false,因为它将终止线程而不是整个应用程序。这是我唯一一次在这种情况下看到IsTerminating false,并且说这也是主要的用例。这个属性总是
AppDomain.CurrentDomain.UnhandledException上的事件时
什么条件导致UnhandledExceptionEventTargets
注册
标志为真?即,是什么导致异常被认为是致命的
是否默认情况下,除非另行配置,否则所有未处理的异常都将是致命的?否,来自另一个应用程序生成的托管线程的未处理异常的注册终止将等于false,因为它将终止线程而不是整个应用程序。这是我唯一一次在这种情况下看到IsTerminating false,并且说这也是主要的用例。这个属性总是正确的。在.NET1.x时代,它曾经可能是错误的。该版本允许线程在未处理的异常上死亡,而不会终止整个进程。这只是没有很好地解决问题,程序员没有实现事件处理程序(或者不知道如何正确处理事件中的异常,是谁做的),所以线程只是在没有任何通知的情况下死掉了。几乎不可能没有这个原因,难以诊断程序故障
Microsoft更改了.NET 2.0中的默认行为,未经处理的异常会终止程序。从技术上讲,仍然可以重写此行为,自定义CLR主机可以通过实现IHostPolicyManager接口使进程保持活动状态。默认主机支持
配置元素。不要用它,那样会有龙。我使用它进行测试。我想测试记录异常的UnhandledExceptionHandler。
所以我设置了它,这样我可以记录消息,但不会破坏测试线程
但通常情况下,这意味着在我所看到的所有其他情况下,注册标志都设置为true。通过简单的尝试,我可以看到相同的非故意异常(例如:InvalidDataException)在应用程序中执行时,注册标志设置为true,但在单元测试中执行相同代码时,注册标志设置为false(VS2017的vstest.executionengine.exe)。