我有一个在启动时会检查某些条件并在主窗体的OnShow事件中启动外部程序的应用程序。问题是,如果启动外部程序时出现错误,我希望应用程序立即终止。但是有一个问题,因为EurekaLog捕获了我的异常,并且通过否定所有对Application.Teminate
的调用以及任何其他正常的关闭方法,以某种方式破坏了消息循环。
所以这是我的问题,在存在这种情况时,ExitProcess是立即终止我的应用程序的最佳途径吗?
最佳答案
到OnShow
触发时,您对程序已经太过犹豫,无法确定您是否真的希望该程序运行。您应该早日做出决定。 OnShow
并不是决定不显示该表单的地方。
在创建主表单之前,您应该检查这种事情。将检查内容放入DPR文件中,如果您确定该程序不应该运行,则只需调用exit
即可。
begin
Application.Initialize;
if not ApplicationShouldReallyStart then
exit;
Application.CreateForm(TMainAppForm, MainAppForm);
Application.Run;
end.
填写自己的
ApplicationShouldReallyStart
实现。 (它确实应该是一个单独的函数,而不是DPR文件中的内联函数。如果DPR文件中的begin
-end
块变得太复杂,则IDE会感到困惑。)除此之外,请勿调用
ExitProcess
。改为调用Halt
。 Halt
调用ExitProcess
,但它也调用单元完成部分和其他特定于Delphi的过程关闭任务。关于delphi - Delphi中MainForm的OnShow事件的ExitProcess,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/912280/