事件为参数线程怎么写

czyoooo 2011-06-16 11:26:03
现在有很多FORM上的查询事件 button1click,button1click,button1click,查询时间比较长经常会出现白屏的情况.

想写个通用线程,参数为click事件,只要传参数 button1.click,就可以执行查询动作,大家有什么好的办法.
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
onlyou13 2011-06-17
  • 打赏
  • 举报
回复
可以把你的查询操作放在线程里执行,查询完成再同步显示到用户界面。
onlyou13 2011-06-17
  • 打赏
  • 举报
回复
写个简单的例子吧, 只需要把需要执行的过程(不能带参数)传给线程的ExecuteMethod方法就行。
Circled = True 表示循环执行, False 表示只运行一次。

但是还是会出现界面卡的情况,因为要同步VCL,所以如果涉及到界面的一些操作,用线程意义不大。

type
TWorkThread = class(TThread)
private
FExecuteMethod: TThreadMethod;
FCircled: Boolean;
protected
procedure Execute; override;
public
constructor Create;
property ExecuteMethod: TThreadMethod read FExecuteMethod write FExecuteMethod;
property Circled: Boolean read FCircled write FCircled default False;
end;

{ TWorkThread }

constructor TWorkThread.Create;
begin
FCircled := False;
FExecuteMethod := nil;
inherited Create(False);
end;

procedure TWorkThread.Execute;
begin
FreeOnTerminate := True;

while not Terminated do
begin
if Assigned(FExecuteMethod) then
begin
Synchronize(FExecuteMethod);
if not FCircled then
Break;
end;
Sleep(10);
end;
end;
bdmh 2011-06-17
  • 打赏
  • 举报
回复
不用线程也无所谓,ado支持异步查询的,设置adoquery的locktype
yqdragon 2011-06-17
  • 打赏
  • 举报
回复
那是因为查询的数据量大啊,查询结果分页显示啊
山东蓝鸟贵薪 2011-06-17
  • 打赏
  • 举报
回复
看不明白,学习中.............
hongqi162 2011-06-17
  • 打赏
  • 举报
回复
把对象传递过去不就可以了么

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧