例如,来自可执行文件或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.Queue
,PostThreadMessage
等)都可以通过消息进行操作。因此,请确保在等待回调时主持应用dll
处理消息。
答案 0 :(得分:7)
要在主线程中执行代码而不访问TThread
实例,请调用类方法TThread.Synchronize
或TThread.Queue
。
如果您碰巧使用的是没有这些方法的旧Delphi编译器,那么带有用户定义消息的SendMessage
或PostMessage
是最简单的解决方案。