2017-06-21 28 views
0

在firemonkey,當我想目前的「循環」後執行一些代碼,我這樣做:如何在firemonkey的下一個循環中排隊某些代碼?

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

,因爲如果我們在mainThread,然後TThread.queue將立刻執行代碼。我很好奇,如果他們不是另一種方式來做到這一點比使用線程?

+0

我認爲Application.OnIdle事件會解決這個問題,但是如果你的代碼可以在後臺線程中運行而沒有問題,那麼這可能是首選。 – GolezTrol

+0

太複雜了,無法在OnIdle中移動我的代碼:(我只想擺脫當前的同步週期 – loki

回答

4

在10.2東京,加入了新的TThread.ForceQueue()方法來解決RSP-15427(添加一個選項,讓TThread.Queue()當主UI線程調用異步運行):

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

無需線程。

在東京之前,如果您不想使用匿名線程撥打TThread.Queue(),則必須重新編寫代碼。例如,您可以使用PostMessage()PostThreadMessage()發佈自己的延遲消息,然後在消息處理程序中完成這項工作。或者像GolezTrol建議的那樣使用TApplication(Events).OnIdle事件。

相關問題