如果我在方法中调用Application.Terminate或Application.MaiForm.Close。应用程序不会终止!
procedure doSomething;
var
ErrorFound: boolean;
begin
[...]
try
if ErrorFound then
Application.Terminate;
finally
[...]
end;
end;
我不明白为什么。
请注意,在Try部分中,我从一个Application.Terminate块内部调用Try...Finally。
发布于 2011-11-10 11:29:14
很可能您是从一个本身不终止的繁忙循环调用Application.Terminate
。如果您输入了一个事件处理程序,但从未从中返回,那么调用Application.Terminate
或Application.MainForm.Close
将是徒劳的。关闭应用程序的这些例程是协作的。他们将消息发送到主消息循环,请求应用程序优雅地关闭。
例如,下面的代码将显示您描述的症状:
procedure TMyForm.Button1Click(Sender: TObject);
begin
while True do
Application.Terminate;
end;
另一种(更有可能的)可能性是,您是从一个模态形式中调用此函数,而不是关闭该模态形式。
除非你显示更多的代码,否则我们只能做这样的猜测。
发布于 2018-09-26 03:05:27
受David上面的回答(https://stackoverflow.com/a/8078808/1041047)的启发,我在TApplication.Terminate之后添加了一行代码:
Application.Terminate;
Application.ProcessMessages;
而且起作用了。
https://stackoverflow.com/questions/8078637
复制相似问题