gpt4 book ai didi

.net - .NET 是否有类似于 Delphi 的 EAbort 的异常?

转载 作者:行者123 更新时间:2023-12-03 15:51:14 25 4
gpt4 key购买 nike

.NET 是否有类似于 Delphi 的 EAbort 的异常?

目前,我定义了自己的“AbortProcess”继承异常。与忽略“AbortProcess”的 My.Application.UnhandledException 处理程序一起使用我仍然想知道 .NET 中是否已经存在类似的机制。

Class AbortProcess
Inherits System.Exception
End Class

Sub Abort()
Throw New AbortProcess()
End Sub

Sub AppDomain_UnhandledException(ByVal sender As Object, ByVal e As ApplicationServices.UnhandledExceptionEventArgs)
If TypeOf e.Exception Is AbortProcess Then
e.ExitApplication = False
End If
End Sub

Sub PerformActions()
Action1()
If Not Action2() Then
Abort()
End If
Action3()
...
End Sub

典型的 .NET 开发人员如何处理此用例?

更新:

不幸的是,由于某些原因,许多人否决了这个问题,但没有发表任何评论。我能弄清楚的唯一原因是他们可能认为永远不应该使用异常来控制程序流程;我倾向于同意这一点。然而,我最近研究了ANTLR,发现他们确实使用自定义异常(RecognitionException)作为控制流构造。结合 Python 的 StopIteration 用法,我相信使用 Exception 作为控制流构造实际上已经被广泛使用。它只是没有像 Delphi VCL 那样标准化。

最佳答案

定义 Delphi 的 EAbort 异常类有两个特性。

  1. IDE 已预先配置为在检测到引发该类的异常时不会中断您的程序。
  2. 主应用程序异常处理程序可识别 EAbort 及其后代,并且在捕获此类异常时不会显示通常的消息框。

看起来您提出的代码完成了第二部分。您可以为第一部分配置 Visual Studio;请参阅另一个 Stack Overflow 问题的答案,Is there a better way to get Visual Studio to ignore try/catch in debug mode?我不知道是否已为此指定了任何异常类。

EAbort 异常旨在使程序停止运行其正在运行的任何事件或消息处理程序,并在主消息循环中恢复。但是,为了使其真正发挥作用,需要编写所有其他代码来正确处理异常。也就是说,他们需要使用finally部分来保持稳定和一致的状态,并且他们需要重新抛出或永远不捕获他们实际上无法修复的异常。

关于.net - .NET 是否有类似于 Delphi 的 EAbort 的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1204769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com