可以这样理解这个问题   创建两个窗体。   一个窗体Form1,窗体上有一个ProgressBar、一个Timer、一个Button,由Timer的OnTimer事件来控制ProgressBar的position,每0.2秒position+1,由button的OnClick事件来打开Form1。   另一个窗体Form2,在FormShow事件中有大量的数据运算。      首先打开Form1,然后点击其上的Button来打开Form2.   请教高手们,如何使得在打开form2的同时,使得Form1的ProgressBar不假死呢?
   

解决方案 »

  1.   

    更正 “由button的OnClick事件来打开Form1。”应为 “由button的OnClick事件来打开Form2。”
      

  2.   

    多线程的同步问题,可以参考
    http://download.csdn.net/source/1601560
      

  3.   

    可以在formshow中的运算加application.ProcessMessages,
    不过我认为不该用timer来控制进度,应该由在FormShow事件中有大量的数据运算来控制吧,否则进度与运算不同步。
      

  4.   

    如何使得在打开form2的同时,使得Form1的ProgressBar不假死呢
    将打开form2所做的事件搬到另一个线程中吧,界面控制还是要在主线程中控制,只要您尽快结束消息处理函数,Form1的消息处理就不会假死了.
      

  5.   

    没有明白楼主的意思,我也没出现假死的现象
    Unit1
    procedure TForm1.ButtonClick(Sender:TObject);
    begin
      Self.ProgressBar1.Position:=100000;
      Form2.ShowModal;
    end;Unit2
    procedure TForm2.FormShow(Sender:TObject);
    var
      I:Integer
    begin
      For i:=0 to 99999 do
      begin
        Form1.ProgressBar1.Position:=i;
      end;
    end;