我有一个在启动时会检查某些条件并在主窗体的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。改为调用HaltHalt调用ExitProcess,但它也调用单元完成部分和其他特定于Delphi的过程关闭任务。

关于delphi - Delphi中MainForm的OnShow事件的ExitProcess,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/912280/

10-12 20:57