在firemonkey下,当我想在当前"循环"之后执行一些代码时,我喜欢这样:
TThread.createAnonymousThread(
procedure
begin
TThread.queue(nil,
procedure
begin
domycode
end);
end).start;
因为如果我们在mainThread中,那么TThread.queue将立即执行代码。我很好奇他们是不是用另一种方法来做这个而不是使用线程?
答案 0 :(得分:5)
在10.2 Tokyo中,添加了一个新的TThread.ForceQueue()
方法来解决RSP-15427(添加一个选项,让TThread.Queue()在主UI线程调用时异步运行):
TThread.ForceQueue(nil,
procedure
begin
domycode
end
);
不需要线程。
在东京之前,如果您不想使用匿名线程来呼叫TThread.Queue()
,则必须重新编写代码。例如,您可以使用PostMessage()
或PostThreadMessage()
发布自己的延迟消息,然后在消息处理程序中执行此操作。或者像GolezTrol建议的那样使用TApplication(Events).OnIdle
事件。