首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

为什么多线程里,找不到窗体对象?帮看看

2012-12-31 
为什么多线程里,找不到窗体对象?------------大虾帮看看本帖最后由 cowboamo 于 2012-12-05 20:51:58 编辑

为什么多线程里,找不到窗体对象?------------大虾帮看看
本帖最后由 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是手动添加加载的,为什么会mainform会找不到?
如果mainform是自动,就可以?

那就是因为mainform还没加载就先执行到线程中的代码了呀
[解决办法]
子线程访问vcl,也需要加同步
[解决办法]
另外,onshow时,窗体其实还未显示稳定
第一次onactive时,才稳定

热点排行