我的程序是访问硬件设备的,每次去读数据的响应时间很慢,主程序像死了一样,比如30秒,只要打开其他东西,程序界面就会发白,
我现在想做一个进度条,当然是假的进度,一直循环,给客户一种程序正在执行的感觉.
但是进度条不会动,因为读硬件数据的是候主程序一直在等待读取结果。
我是这样想的。
show一个窗口,现实“正在处理”,
然后去读硬件,
然后读完把窗口关闭。但是show出来的窗口的进度条还是不会动的,因为读硬件时间很长,不知道是否可以放在线程里做,放进去好不好?不知道各位有没有碰到过这样的问题,如果有好的解决办法请告诉我一声,谢谢
我现在想做一个进度条,当然是假的进度,一直循环,给客户一种程序正在执行的感觉.
但是进度条不会动,因为读硬件数据的是候主程序一直在等待读取结果。
我是这样想的。
show一个窗口,现实“正在处理”,
然后去读硬件,
然后读完把窗口关闭。但是show出来的窗口的进度条还是不会动的,因为读硬件时间很长,不知道是否可以放在线程里做,放进去好不好?不知道各位有没有碰到过这样的问题,如果有好的解决办法请告诉我一声,谢谢
解决方案 »
- 怪事啊.. 无法给frame上的edit传递数据!!!!!!!!!!!
- 如何在自己的程序里创建wps对象,用wps对象来完成打开,另存为和关闭等操作.大家来帮帮忙!
- PostThreadMessage如何传递字符串数据,以及如何获取传递的数据
- 多线程数据库查询...
- 有喜欢听张震恐怖故事的朋友请进来。
- Delphi 7.0中那里有fastnet控件面板?
- StringGrid中用回车来作焦点切换,如何实现?
- 怎样让stringgrid和ado相连,让sgrid的数据保存在ado中
- 数据库登陆密码怎么保存,我要在程序里面让用户可以修改密码,要单独的文件吗?急用!
- ADO数据集的刷新问题。
- 如何使一控件始终显示滚动条?
- Acdsee是如何加载图片的,加载速度这么快,还有我的加载方式,有时会显示不出图片,代码如下
进度条那段放到线程去做,是不是position 加的动作在线程做?那么主程序去读硬件的时候,进度条还是不会动啊,我试了
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.
我写的小例子希望能对你有所启发!
MSN:[email protected]