Delphi 如何在firemonkey下对要在下一个周期执行的代码进行排队?

Delphi 如何在firemonkey下对要在下一个周期执行的代码进行排队?,delphi,firemonkey,Delphi,Firemonkey,在firemonkey下,当我想在当前“循环”之后执行一些代码时,我会这样做: TThread.createAnonymousThread( procedure begin TThread.queue(nil, procedure begin domycode end); end).start; 因为如果我们在主线程中,那么TThread.queue将立即执行代码。我很好奇他们的方法是不是除了使用线程之外

在firemonkey下,当我想在当前“循环”之后执行一些代码时,我会这样做:

 TThread.createAnonymousThread(
   procedure
   begin
     TThread.queue(nil,
       procedure
       begin
         domycode
       end);
   end).start;
因为如果我们在主线程中,那么TThread.queue将立即执行代码。我很好奇他们的方法是不是除了使用线程之外的另一种方法?

在10.2 Tokyo中,在address中添加了一个新方法(添加一个选项,让TThread.Queue()在被主UI线程调用时异步运行):

不需要线程

在Tokyo之前,如果不想使用匿名线程调用
TThread.Queue()
,则必须重新编写代码。例如,您可以使用或发布一条延迟消息,然后在消息处理程序中执行该工作。或者像GolezTrol建议的那样使用事件。

在10.2 Tokyo中,在address中添加了一个新方法(添加一个选项,让TThread.Queue()在被主UI线程调用时异步运行):

不需要线程


在Tokyo之前,如果不想使用匿名线程调用
TThread.Queue()
,则必须重新编写代码。例如,您可以使用或发布一条延迟消息,然后在消息处理程序中执行该工作。或者像GolezTrol建议的那样使用事件。

我认为Application.OnIdle事件可以解决这个问题,但是如果您的代码可以在后台线程中运行而没有问题,那么这可能是首选。太复杂了,无法在OnIdle中移动我的代码:(我只想退出当前的同步周期我认为Application.OnIdle事件可以解决这个问题,但是如果您的代码可以在后台线程中运行而没有问题,那么这可能是首选。太复杂了,无法在OnIdle中移动我的代码:(我只想退出当前的同步周期。)
TThread.ForceQueue(nil,
  procedure
  begin
    domycode
  end
);