我需要使用C#按需创建致命异常。虽然我已经无意间做了这么多次,现在我需要,但我找不到一个简单的方法。
它很容易导致空引用错误或除以零等,但我需要一些CTD而不提供继续选项。
感谢您的帮助。
答案 0 :(得分:9)
不要使用异常来实现这一点,它有太多的副作用。包括根本不终止程序,未处理的异常是否结束程序是可以更改的CLR策略。两者都是自定义CLR主机,并且今天仍然由legacyUnhandledExceptionPolicy配置属性公开。
立即中止程序的最可靠方法是Environment.FailFast()。
,没有任何事件被解雇且没有任何清理(包括没有运行终结器)。答案 1 :(得分:0)
恕我直言,我更喜欢温和的做法。我创建了一个自定义的Exception,我称之为FatalException。 https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions。这样当我调用抛出FatalException的方法时,我只是在调用和catch(FatalException fe)周围进行try-catch。我通常会根据需要重新抛出以回到父窗体,它也有FatalException异常的最终捕获,然后记录它(我使用Log4Net),显示一个消息框,告知致命情况的原因并调用我的重写Dispose ()方法并优雅地退出应用程序。显然,嵌套调用越深,这就越困难。额外的工作值得我额外的恩惠。如果这成为您的应用程序的标准,您将在遇到它时理解它并确保您不会破坏它。我将自定义异常放在DLL库中。如果您的代码在库中,则此方法仍然有效,因为异常也在库中,它们可以由另一个库和主应用程序共享。这意味着您的库也可以抛出FatalException,尽管这样做的原因应该很少。