C
cdesign
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟太笨,可能是个很简单的问题,但是一直解决不了。
问题描述:
当点击一个按钮的时候,执行一个查询或者其他什么,这个时候需要显示一个数据交换的动画提示。但是怎么老是等查询结束才能显示动画,否则不是不动就是不现实。
是不是要用到多线程?下面是一个模拟的效果,如果它能for循环之前正确显示动画,应该就没问题了:
问题描述:
当点击一个按钮的时候,执行一个查询或者其他什么,这个时候需要显示一个数据交换的动画提示。但是怎么老是等查询结束才能显示动画,否则不是不动就是不现实。
是不是要用到多线程?下面是一个模拟的效果,如果它能for循环之前正确显示动画,应该就没问题了:
代码:
type
//定义一个线程类
TsyncThread = class(TThread)
protected
procedure execute;
override;
end;
TfrmNone = class(TForm)
ListBox2: TListBox;
ListBox1: TListBox;
btnExecute: TButton;
Label1: TLabel;
Label2: TLabel;
procedure btnExecuteClick(Sender: TObject);
private
//线程实例
Thread1, Thread2: TSyncThread;
//自定义过程,在线程结束时调用
procedure Thread1Done(sender: TObject);
procedure Thread2Done(sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;
const
MaxSize = 100;
var
frmNone: TfrmNone;
//数据全局区
GlobalData: array[1..MaxSize] of integer;
IncNum: Integer = 0;
implementation
{$R *.dfm}
//线程执行主体
procedure TSyncThread.execute;
var
i: integer;
begin
FreeOnTerminate := True;
for i := 1 to Maxsizedo
begin
Inc(IncNum);
GlobalData[i] := IncNum;
sleep(1);
end;
end;
//创建线程实例
procedure TfrmNone.btnExecuteClick(Sender: TObject);
begin
Thread1 := TSyncThread.Create(false);
Thread1.OnTerminate := Thread1Done;
Thread2 := TSyncThread.Create(false);
Thread2.OnTerminate := Thread2Done;
end;
//当线程1执行完后,将GlobalData数据显示出来
procedure TfrmNone.Thread1Done(sender: TObject);
var
i: integer;
begin
ListBox1.Items.Clear;
for i := 1 to MaxSizedo
Listbox1.Items.Add(intToStr(GlobalData[i]));
end;
//当线程2执行完后执行 ,将GlobalData数据显示出来
procedure TfrmNone.Thread2Done(sender: TObject);
var
i: integer;
begin
ListBox2.Items.Clear;
for i := 1 to MaxSizedo
Listbox2.Items.Add(intToStr(GlobalData[i]));
end;
end.