关于执行存储过程时的添加进度条问题,假的也可以~~~(100分)

  • 主题发起人 主题发起人 icelovey
  • 开始时间 开始时间
I

icelovey

Unregistered / Unconfirmed
GUEST, unregistred user!
想在执行存储过程的时候添加一个进度条, 让用户感觉电脑还是活的, 真的进度条搞不定, 就说做个假的吧, 做了一个窗体, 放了一个GIF在IMAGE中(已经安装GIFImage), 但是在执行存储过程的时候弹出那个进度条窗体, 但是执行的时候其他东西好像都不动了, 应该是线程被占用了, 有没有办法可以解决呢? 有相关的例子更好了!!我的EMAIL:30986352@qq.com
 
弄个动态进度条图片放哪儿
 
我放的是进度条GIF, 在执行存储过程的时候, 其他东西都不会动了!!<br>放那也没有用~
 
有知道的人吗?<br>我想将窗体放在一个线程中,但是对多线程不熟悉, 有人可以帮我么~
 
开一个线程做这个,不过存储过程的执行也要支持线程
 
可是对线程不熟悉啊, 一会也不是很明白,<br>有没有相关的例子呢``简单点的就好!
 
给你个Demo,但是你的存储过程要是在主线程里面执行的话估计也难免影响到子线程的执行,建议在子线程中执行存储过程,这样主界面没有死机现象。<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, ComCtrls, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; ProgressBar1: TProgressBar;<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>&nbsp; type<br>&nbsp; &nbsp; TTestThread = class(TThread)<br>&nbsp; &nbsp; private<br>&nbsp; &nbsp; &nbsp; Fpb: TProgressBar;<br>&nbsp; &nbsp; &nbsp; iPos: integer;<br>&nbsp; &nbsp; &nbsp; procedure DoWhatVCLAction;<br>&nbsp; &nbsp; public<br>&nbsp; &nbsp; &nbsp; procedure Execute; override;<br>&nbsp; &nbsp; &nbsp; constructor Create(pb: TProgressBar);<br>&nbsp; &nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>constructor TTestThread.Create(pb: TProgressBar);<br>begin<br>&nbsp; Fpb:= pb;<br>&nbsp; iPos:= pb.Position;<br>&nbsp; FreeOnTerminate:= true;<br>&nbsp; inherited Create(False);<br>end;<br><br>procedure TTestThread.DoWhatVCLAction;<br>begin<br>&nbsp; Fpb.Position:= iPos;<br>end;<br><br>procedure TTestThread.Execute;<br>begin<br>&nbsp; while iPos &lt; 100 do<br>&nbsp; begin<br>&nbsp; &nbsp; Inc(iPos);<br>&nbsp; &nbsp; //访问 VCL 的行为一定在 Synchronize 里!<br>&nbsp; &nbsp; synchronize(DoWhatVCLAction);<br>&nbsp; &nbsp; if Terminated then exit;<br>&nbsp; &nbsp; Sleep(20);<br>&nbsp; end;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; N: integer;<br>begin<br>&nbsp; TTestThread.Create(ProgressBar1);<br>&nbsp; for N:= 0 to 100000 do<br>&nbsp; begin<br>&nbsp; &nbsp; Application.ProcessMessages;<br>&nbsp; end;<br>end;<br><br>end.
 
如果想把存储过程在线程里面执行,那么Create方法改改,把存储过程控件当参数传递进线程里面,然后在DoWhatVCLAction函数里面执行你的存储过程,这样主界面就不会死掉了。<br>当然,Execute方法里面的While语句就不要了,执行一次就够了。
 
后退
顶部