情况如下:在应用程序主窗体上创建事件某些条件不受尊重,因此应用程序需要关闭。
是的,这是一个糟糕的设计,但应该如何关闭应用程序?使用Application.MainForm.Close生成AV。 Application.Terminate不是一个很好的选择。其他想法?
答案 0 :(得分:12)
Application.Terminate
效果很好。但是,请记住,它是延迟终止,它所做的只是将WM_QUIT
消息发布到调用线程的消息队列,因此应用程序实际上不会终止{{1}调用它来开始处理主线程的消息队列。因此,在应用程序实际终止之前,您可能会在屏幕上看到MainForm闪烁。如果要避免这种情况,可以将Application.Run()
属性设置为false,例如:
Application.ShowMainForm
然而,正如其他人所说,更好的设计是在项目的DPR文件中进行检查,甚至根本不创建MainForm,例如:
procedure TMainForm.FormCreate(Sender: TObject);
begin
if (some condition) then
begin
Application.ShowMainForm := False;
Application.Terminate;
end;
end;
答案 1 :(得分:4)
如果你想坚持你糟糕的设计,那么这是一个糟糕的答案:
try
Application.Terminate
except
end;
答案 2 :(得分:2)
Application.Terminate
非常好,除非您在创建表单之前(在dpr中)需要优化设计以检查这些条件。