我的程序是访问硬件设备的,每次去读数据的响应时间很慢,主程序像死了一样,比如30秒,只要打开其他东西,程序界面就会发白,
我现在想做一个进度条,当然是假的进度,一直循环,给客户一种程序正在执行的感觉.
但是进度条不会动,因为读硬件数据的是候主程序一直在等待读取结果。
我是这样想的。
show一个窗口,现实“正在处理”,
然后去读硬件,
然后读完把窗口关闭。但是show出来的窗口的进度条还是不会动的,因为读硬件时间很长,不知道是否可以放在线程里做,放进去好不好?不知道各位有没有碰到过这样的问题,如果有好的解决办法请告诉我一声,谢谢

解决方案 »

  1.   

    to GARNETT2183
    进度条那段放到线程去做,是不是position 加的动作在线程做?那么主程序去读硬件的时候,进度条还是不会动啊,我试了
      

  2.   

    to postren读硬件的部分放到线程里做,那么show出来的窗口是用,form.show,不是ShowModal,不能禁止用户做其他操作,万一点了其他窗口,那么消息会不会乱掉?
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        ProgressBar1: TProgressBar;
        Label1: TLabel;
        Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        i:integer;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin
        ProgressBar1.Min:=0;
        ProgressBar1.Max:=100;
        i := 0;
        timer1.Enabled:=true;end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
         ProgressBar1.Position:=trunc(i*100 div 999);
         self.Caption:=inttostr(i);
         label1.Caption:= inttostr(ProgressBar1.Position)+'%';
         I := i + 1;
         if  (ProgressBar1.Position=100) then
           begin
            timer1.Enabled:=false;
            showmessage('读取完毕');
           end
    end;end.
    我写的小例子希望能对你有所启发!
      

  4.   

    我有實例和源代碼!
    MSN:[email protected]