delphiのマルチスレッドでメインインターフェイスを更新する方法
在 Delphi 中,可以使用 TThread.Synchronize 或 TThread.Queue 方法来更新主界面。
メインスレッドで指定したメソッドを実行するために TThread.Synchronize メソッドが使用します。使用方法を次に示します。
TThread.Synchronize(nil, procedure
begin
// 在此处更新主界面的代码
end);
TThread.Queueメソッドにより指定した処理をメッセージキューに追加し、メインスレッドが空いている時に実行できます。
TThread.Queue(nil, procedure
begin
// 在此处更新主界面的代码
end);
メインUIを更新する必要がある場所で、この2つのメソッドを呼び出して、更新コードをメインスレッドに実行に追加できます。これらのメソッドは、メインスレッドが更新コードの実行を完了するまで現在のスレッドをブロックする点に留意してください。バックグラウンドスレッドでメインUIを更新する場合、1番目のパラメーターをTFormまたはTControlオブジェクトに設定することで、更新操作がそのコントロールのコンテキストで実行されるように指定できます。
また、TThread.Queue あるいは TThread.Synchronize メソッドの匿名メソッド版を利用すれば、わざわざメソッドを定義することなく、更新コードを直接これらのメソッドに渡すことができます。例えば、
TThread.Synchronize(nil,
procedure
begin
// 在此处更新主界面的代码
end);
上記のコードにおいて匿名メソッド内のコードがメインスレッド上で実行されることで、メイン画面の更新が行われます。