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

 TThread.createAnonymousThread(
   procedure
   begin
     TThread.queue(nil,
       procedure
       begin
         domycode
       end);
   end).start;


因为如果我们在mainThread中,那么TThread.queue将立即执行代码。我很好奇,如果他们不是使用线程而不是其他方法呢?

最佳答案

在10.2 Tokyo中,将新的TThread.ForceQueue()方法添加到地址RSP-15427(添加一个选项,以使TThread.Queue()在主UI线程调用时异步运行):

TThread.ForceQueue(nil,
  procedure
  begin
    domycode
  end
);


不需要线程。

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

10-08 03:07