为什么多线程里,找不到窗体对象?------------大虾帮看看
本帖最后由 cowboamo 于 2012-12-05 20:51:58 编辑 下面的代码在新建的一个程序里可以执行多线程,
但为什么我把代码移植到项目里的Inforform就不行了?
..
我的项目代码里的文件,该窗体是通过show生成的,
运行下面的代码,就会说找不到自身窗体Inforform?
但当我把窗体设为启动时加截就不会报错,
只是运行时不会出现进度条加载的过程..
到底错在哪了?
{声明多线程}
type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
procedure TMyThread.Execute;
var
i:Integer;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
mainform.ProgressBar1.Max := 600000;
for i := 1 to 600000 do
begin
mainform.ProgressBar1.StepBy(1);
end;
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
TMyThread.Create(False); //调用
end;[解决办法]
那就是因为mainform还没加载就先执行到线程中的代码了呀
[解决办法]
子线程访问vcl,也需要加同步
[解决办法]
另外,onshow时,窗体其实还未显示稳定
第一次onactive时,才稳定