明明Application.Terminate了,为什么程序不结束?(50分)

  • 主题发起人 主题发起人 杨康
  • 开始时间 开始时间

杨康

Unregistered / Unconfirmed
GUEST, unregistred user!
如在button.onclick事件中调用了 自己定义的一个函数(方法),在运行那个
函数(方法)的一段代码是这样的:
try
......
except
Application.Terminate ;
end;
明明执行了Application.Terminate 可是程序居然不立刻结束,非要等 onClick
事件运行完了才结束!这样很不好!怎么才能让程序当时就立刻结束呢?
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate ;
end;

真不明白为什么这么罗索~~~
 
不是不是!
在 onclick中调用了一个函数, 在执行这个函数时有异常 在except里有Application.Terminate
这一句,可是程序没有结束!
问:怎么结束?
 
我引用D5开发人员指南的一段话
调用TA p p l i c a t i o n . Te r m i n a t e ( )可以终止应用程序。Te r m i n a t e ( )会调用Wi n d o w s的
P o s t Q u i t M e s s a g e ( )函数向应用程序的消息队列中发一个消息。V C L据此释放应用程序创建的所
有对象。要说明的是,并不是一调用Te r m i n a t e ( )就马上使应用程序终止,而是当应用程序检索
到W M _ Q U I T消息时才会真正终止。而H a l t ( )立即终止应用程序的执行,但不释放先前创建的
对象,也不会返回到调用Halt()的地方
 
Application.Terminate 会释放所占用的资源
而application.halt不会释放所占用的资源造成资源浪费
 
偶给你想个办法,在Application.Terminate之前加句
Application.MessageBox('程序出现了异常,将被终止!','程序错误',MB_OK+MB_ICONError);
这样就会给程序一个缓冲的时间来处理异常了
 
procedure apro;
begin
try
raise exception.Create('An exception!');
except
halt;//NOT application.terminate;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
apro;
showmessage('why not exit?');
sleep(1500);
end;
 
我一般是这样写:
try
......
except
Application.Terminate ;
Exit;//加上这一句,直接跳出后面的程序
end;
 
在Application.Terminate ;
后面加一句 : Break; 看看
 
或者用Close也可以
try
......
except
Close;
end;

别忘了
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
 
Application.Terminate 并不是立即结束程序,而是要在执行完调用该方法的过程后,
结束程序,
所以你就用Close或Halt,特别是Halt,他的作用是非正常地终止程序,程序会立即结束。
这是他和Terminate 的一个根本区别。
 
真无聊,这么个小问题就搞不定

PostQuitMessage(WM_QUIT);

就完了。
一般不应该使用 Application.Terminate
 
halt(0)
试试看,,保证结束。。
 
接受答案了.
 
后退
顶部