可以这样理解这个问题 创建两个窗体。 一个窗体Form1,窗体上有一个ProgressBar、一个Timer、一个Button,由Timer的OnTimer事件来控制ProgressBar的position,每0.2秒position+1,由button的OnClick事件来打开Form1。 另一个窗体Form2,在FormShow事件中有大量的数据运算。 首先打开Form1,然后点击其上的Button来打开Form2. 请教高手们,如何使得在打开form2的同时,使得Form1的ProgressBar不假死呢?
http://download.csdn.net/source/1601560
不过我认为不该用timer来控制进度,应该由在FormShow事件中有大量的数据运算来控制吧,否则进度与运算不同步。
将打开form2所做的事件搬到另一个线程中吧,界面控制还是要在主线程中控制,只要您尽快结束消息处理函数,Form1的消息处理就不会假死了.
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;