请问高手多线程问题(50分)

  • 主题发起人 主题发起人 loner_meme
  • 开始时间 开始时间
L

loner_meme

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用多线程增加Combobox中的项目,请教高手一下,下面的程序代码有没有错误(有的话,应该怎么做):
Constructor AddItemThread.Create(Q : TQuery;
CMBStrings : TStrings;
S : String);
begin
Query := Q;
SFieldName := S;
CMBAdd := CMBStrings;
Inherited Create(false);
FreeOnTerminate := True;
end;

Procedure AddItemThread.Execute;
begin
With CMBAdddo
begin
Clear;
Add('- 全部 -');
With Querydo
begin
Close;
Open;
First;
While Not Eofdo
begin
Add(FieldByName(SFieldName).AsString);
Next;
end;
end;
end;
end;
 
要在保护方法里操作VCL可示类
 
2楼的名字比较熟悉,好像是个有钱人。
编译运行监视线程就知道有没有错误了,
还有,不要乱用线程,这句话是从%……¥—……得到的。
good luck
 
谢谢两位高手,
编绎是没错的,但运行程序就有错。
能不能写一段增加combobox控件中的items的代码。
[:(][:(][:(][:(]
 
DELPHI的线程类生成以后不是有个例子吗,抄袭哪个例子的代码就行了
 
Query 要用动态生成!!!!
 
呵呵,楼主的代码有危险.
 
type
TAddItemThread=class(tthread)
protected
procedure execute;
override;
end;
type
Tform1=class(tform)
private
procedure threaddone;
procedure createthread;
public
procedure addvalue;
end;
var
form1:TForm1;
additemthread:TAddItemThread
procedure Tform1.createthread;
begin
additemthread:=Tadditemthread.create(false);
additemthread.freeonterminatered:=True;
additemthread.onterminated:=threaddone;
end;

procedure TForm1.addvalue
With CMBAdddo
begin
Clear;
Add('- 全部 -');
With Querydo
begin
Close;
Open;
First;
While Not Eofdo
begin
Add(FieldByName(SFieldName).AsString);
Next;
end;
end;
end;
end;

Procedure AddItemThread.Execute;
begin
Form1.addvalue
end;

看看这样是否可以。不全的地方自己补充。
 
好的,我试试看!
 
多人接受答案了。
 
后退
顶部