在线程中怎样向主线程发送消息?(100分)

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

labafa

Unregistered / Unconfirmed
GUEST, unregistred user!
在主线程中是否以一般的方法接收?
 
那恐怕不行吧
 
我要达到的目的是,当线程做完一件事后告知主线程,
比如说,我要线程去查数据库,查完后告知主线程,主线程收到这个消息后,
去显示数据库中的部分内容。
 
应该可以。
const WM_COMPETION = WM_USER + 100;
TMyThread = class(TThread)
private
m_Handle: HWND;
protected
procedure Execute;
public
constructor Create(CreateSuspended: Boolean;
Handle: HWND);
end;

TMyForm = class(TForm)
...
public
...
procedure OnCompletion(var msg: TMessage);
message WM_COMPLETION;
end;

constructor Create(CreateSuspended: Boolean;
Handle: HWND);
begin
m_Handle := Handle;
inherited Create(CreateSuspended);
end;

procedure TMyThread.Execute;
begin
...
PostMessage(m_Handle, WM_COMPLETION, wParam, lParam);
end;

procedure TMyForm.OnCompletion(var msg: TMessage);
begin
//do
your work.
end;
大致如此。
 
同意kokusan的做法;

可用更简单的方法:
定义好消息如:WM_MYMESSAGE ,然后在要发消息的地方直接调用
PostMessag(Application.mainform.m_handle,WM_MYMESSAGE,0,0)
 
谢谢两位。
PTH那句,不是m_handle,是handle,你一定是疏忽了。
我想查完一批数据后,将其暂时放在数据激里,然后主线程收到消息后,
每次只显示10条在界面上,
否则在线程中用同步方式主程序也会没响应的。
这样做不知是否合理?
 
后退
顶部