如何在firemonkey下排队下一个循环执行的代码?

lok*_*oki 1 delphi firemonkey

在firemonkey下,当我想在当前"循环"之后执行一些代码时,我喜欢这样:

 TThread.createAnonymousThread(
   procedure
   begin
     TThread.queue(nil,
       procedure
       begin
         domycode
       end);
   end).start;
Run Code Online (Sandbox Code Playgroud)

因为如果我们在mainThread中,那么TThread.queue将立即执行代码.我很好奇他们是不是用另一种方法来做这个而不是使用线程?

Rem*_*eau 5

在10.2 Tokyo中,TThread.ForceQueue()添加了一个新方法来解决RSP-15427(添加一个选项,让TThread.Queue()在主UI线程调用时异步运行):

TThread.ForceQueue(nil,
  procedure
  begin
    domycode
  end
);
Run Code Online (Sandbox Code Playgroud)

不需要线程.

在东京之前,如果您不想使用匿名线程来调用,则必须重新编写代码TThread.Queue().例如,您可以使用PostMessage()或发布自己的延迟消息PostThreadMessage(),然后在消息处理程序中执行该操作.或者TApplication(Events).OnIdle像GolezTrol建议的那样使用该事件.