有没有办法在不引发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 ...');
...
在这个示例中,如果i的值为5,程序执行将不会中止...它将显示消息“我必须为10的值!”,然后消息“i的值不正确!” (因为引发了EAbort异常)然后消息“Execution continue ...”。我知道如何解决这种情况,但我需要没有EAbort异常的sysutils.abort的通用解决方案。
答案 0 :(得分:10)
退出当前方法
如果退出程序,请使用普通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;
关闭您的申请
在图形应用程序中,您可以调用application.terminate
在控制台应用程序中,使用退出代码调用halt
,或使用错误代码调用RunError
。
halt
/ RunError
也可以在图形应用程序中使用,但不推荐使用,因为它不允许应用程序正常关闭。
这会让您的用户感到不安,因为无法触发主窗体的OnCloseQuery
事件
通常,您(提供)将保存用户在此事件处理程序中的工作。
(*) exit(return_code)
is supported in Delphi 2009 and newer.