VCL线程不安全,用Synchronize,结果界面死机,和没用线程一样了,求解,谢谢!
1.线程里面调用VCL不安全,到底怎么操作不安全,我做一个字幕滚动,就改下LABEL的位置安全否?不见控件操作起来安全否,比如TCientSockte?
2.把字幕滚动的过程labelroll()放到Synchronize,结果界面冻结了,直接放到线程中则没事(但是不安全?)
procedure labelroll()
begin
while( Label1.Top>-16)do
begin
Label1.Top:=Label1.Top-2;
Label2.Top:=Label2.Top-2;
Sleep(1000);
end;
end;
我想正确的写法可能是线程中放:
while( Label1.Top>-16)do
begin
Synchronize(移动LABEL);
Sleep(1000);
end;
3.我有一个函数,里面有很多操作,需要放到一个线程里面执行.
我发现Synchronize(直接套这个函数),结果执行时界面冻结,就是说用Synchronize时,多程序根本不起作用.
但是函数里面有很多VCL控件,大部分是涉及网络操作的不可见控件,这些控件不套用Synchronize安全吗?
谢谢大家!
[解决办法]
可视VCL组件,只能在主线程中操作,都是线程不安全的。
[解决办法]