5

例如,来自可执行文件或 dll 中CreateTimerQueueTimer回调提供的线程?具有与主线程相同的线程 ID 很重要。

procedure TMyMainClass.ExecuteMe(someparam: paramtype);
begin
  {something}
end;

procedure TimerCallback(pvContext: pointer; fTimerOrWaitFired: boolean); stdcall;
begin
  {do what ?}
end;

Final update:
所有这些东西(TThread.Synchronize,TThread.QueuePostThreadMessage)都通过消息起作用。因此,请确保dll在等待回调时托管您处理消息的应用程序。

4

1 回答 1

7

要在主线程中执行代码,而不访问TThread实例,请调用类方法TThread.SynchronizeTThread.Queue.

如果您碰巧使用的是没有这些方法的旧 Delphi 编译器,那么SendMessagePostMessage使用用户定义的消息是最简单的解决方案。

于 2013-04-06T21:20:24.350 回答