强行关闭线程后,程序无法退出(在线等待,谢谢,分不够再加!)(100分)

to wolaixue 兄:
在你们的启发下,我知道可能是因为我在线程中创建了form的问题!
//excute开始,创建一个放置进度条的窗体
Application.CreateForm(Tstartup, startup);
//本来在excute结束时是要free掉的,但是强行结束时就不执行free语句了
//估计问题出在这里,你说呢?
 
估计你说的对,按我说的方法测试一下就知道了!
 
创建Form的代码最好放在主线程里,你可以在付线程里发消息来同步。
 
我现在把
Application.CreateForm(Tstartup, startup);
startup.ProgressBar1.Visible:=true;
放在主线程里
然后在该线程中startup.show ;
奇怪的是主线程如果没有startup.ProgressBar1.Visible:=true;时能强行结束并顺利退出
但是如果有这句就会报错了!
你说的同步如何实现?谢谢

 
错误码:
----------
system error . Code =5
拒绝访问。-
-------------
 
干吗要这句:
startup.ProgressBar1.Visible:=true;
FORM设计时就设它为True不就是了
我这里说的同步就是用付线程控制FORM的显示和关闭
startup.show ;也算是发消息吧。
 
而且如果主线程中:
Application.CreateForm(Tstartup, startup);
startup.ProgressBar1.Visible:=true;
子线程中startup.show ;
在主线程中强行结束子线程时如果调用startup.free;会报错。
估计stuartup还被子线程占用着,所以主线程无法访问!
 
吗要这句:
startup.ProgressBar1.Visible:=true;
FORM设计时就设它为True不就是了
~~~~~~~~~~~~~~~~就算刚开始visible=true也会报错,只要visible=true就都报错,不管是什么时候设置的。
无法理解。
 
只要startup窗口上
有Tbutton,TprogressBar等类的子控件,并且它们的visible属性为true
就不能正确关闭程序
子控件为Timage的实例时,就能正常
估计TWincontrol的子类都不行 :(
 
问题解决了!~~^_^
我查了一下资料!得知由于Vcl实现机制的问题,在线程中使用vcl控件的方法和属性最好使用
Synchronize。
所以我把startup.show ;
改为Synchronize(startup.show);就好了!!!
多谢各位的捧场和帮忙才让问题得以这么快解决。
马上发分!!以后各位如果有更好的解决方法,请回帖告知,谢谢。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
721
import
I
顶部