2016-09-25 12 views
1

現在のprocessmessageループで現在の命令を実行するのではなく、次のprocessmessageループで実行します。彼らはそれを行う良い方法ですか?それはそれは労働者に呼び出されたのみ場合次のprocessmessageにタスクの実行を報告する方法は?

+5

ProcessMessagesを必ず呼びたくはありません。 –

+0

私はちょうどmainthreadにとどまりたいです:) – loki

+3

あなたはProcessMessagesを呼びたくありません。 –

答えて

8

TThread.Queue()が非同期の問題だ場合TThread.queueシームは:(私もFireMonkeyの下mは何イムそのTThread.queueがメインスレッドから実行することはできません以外を探していなければTThread.Queue()は、メインスレッドで呼び出されるとスレッドは、それが同期している代わりに。

は、あなたが求めているものを行うには、あなたがしてTThread.Queue()を呼び出すワーカースレッドを作成するためにTThread.CreateAnonymousThread()またはTTask.Run()を使用することができます。

RSP-15427 Add an option to let TThread.Queue() run asynchronously when called by the main UI threadに投票してください。

+0

ありがとう私は投票...はい、私は右、TThread.CreateAnonymousThread()内のTThread.Queue()と他の選択肢がありませんでした:(それはちょうどこれのためのスレッドを作成するために少し重いです:( – loki

+0

参照[遅延アクション再訪()を使用してメソッドをポストすることで動作します(例: 'PostMessage()') 'を実行し、次のメッセージループで実行します –

+0

@LURDこれはWindowsのみのソリューションですFireMonkeyというタグが付いていますので、クロスプラットフォームのソリューションが必要であることを示している可能性があります –

関連する問題