如何在没有EAbort的情况下中止?

OnL*_*eNG -4 delphi exception

有没有办法在不引发EAbort异常的情况下中止方法的执行?

这是一个问题:

....

try
  i := strtoint(Edit1.Text);
  if not (i=10) then
  begin
    showmessage('Value for I must be 10 !');
    sysutils.abort;
  end;
except
  showmessage('Wrong Value for i !');
end;

showmessage('Execution continue ...');

...
Run Code Online (Sandbox Code Playgroud)

在这个示例中,如果i的值为5,程序执行将不会中止...它将显示消息"我必须为10的值!",然后消息"i的值错误!" (因为引发了EAbort异常)然后消息"Execution continue ...".我知道如何解决这种情况,但我需要没有EAbort异常的sysutils.abort的通用解决方案.

Joh*_*ica 10

退出当前方法如果退出过程,
请使用plain exit.
或者exit(return_code)如果退出函数(*).

请注意,exit不会在try-except块中捕获,但会在try-finally块中捕获.
如果你想要更细粒度的控制,你可以使用break和来打破循环continue.
最后有选择goto.这是最后的选择,通常被认为是代码气味.

样品:

function ExitBreakContinue(WhatToDo: integer): string;
var
  a,b,i: integer;
label SomeLabel;
begin
  a:= 0; b:= 0;
  try
    for i:= 0 to 10 do begin
      a:= a + 1;
      case WhatToDo of
        1: exit('exit_called');
        2: continue;
        3: break;
        4: abort;
        5: goto SomeLabel;
      end;
      b:= b + 1;
    end; {for i}
    Result:= 'a,b = '+IntToStr(a)+','+IntToStr(b);
  finally
    Result:= Result + ' finally';
  end;
  SomeLabel: Result:= Result + ' goto '; 
end;
Run Code Online (Sandbox Code Playgroud)

关闭应用程序
在您打电话的图形应用程序中application.terminate.
halt带有退出代码或RunError错误代码的控制台应用程序调用中.

halt/ RunError也可以在图形应用程序中工作,但不建议这样做,因为它不允许应用程序正常关闭.
这会使您的用户感到不安,因为OnCloseQuery无法触发主窗体的事件.
通常,您(提供)将保存用户在此事件处理程序中的工作.

(*)exit(return_code)在Delphi 2009及更高版本中受支持.

  • @OnLineNG显然你很困惑.您不了解您的具体问题,但遗憾的是您没有询问有关您具体问题的问题.你问了一个关于其他问题的明确问题,这是你的答案.你提出错误的问题是你的问题.你需要停止寻找魔法子弹,花一点时间来解决你的问题. (4认同)