5

情况如下:在应用程序主窗体上创建事件某些条件没有得到遵守,所以应用程序需要关闭。

是的,这是一个糟糕的设计,但应用程序应该如何关闭?使用 Application.MainForm.Close 生成一个 AV。Application.Terminate不是一个很好的选择。其他想法?

4

3 回答 3

13

Application.Terminate工作得很好。但是,请记住,这是一个延迟终止,它所做的只是WM_QUIT向调用线程的消息队列发布一条消息,因此应用程序实际上不会终止,直到Application.Run()被调用以开始处理主线程的消息队列。因此,在应用程序实际终止之前,您可能会在屏幕上看到 MainForm 闪烁。如果你想避免这种情况,你可以将Application.ShowMainForm属性设置为 false,例如:

procedure TMainForm.FormCreate(Sender: TObject);
begin
  if (some condition) then
  begin
    Application.ShowMainForm := False;
    Application.Terminate;
  end;
end;

但是,正如其他人所说,更好的设计是在项目的 DPR 文件中进行检查,而不是在必要时根本不创建 MainForm,例如:

Application.Initialize;
if not (some condition) then
begin
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end;
于 2013-07-30T18:28:36.397 回答
4

好吧,如果你想坚持你糟糕的设计,这是一个糟糕的答案:

try
  Application.Terminate
except
end;
于 2013-07-30T13:35:51.593 回答
2
Application.Terminate

已经足够好了,除非您在创建表单之前(在 dpr 中)细化您的设计以检查这些条件。

于 2013-07-30T11:33:36.550 回答