整理 XE4 多執行緒原始碼後發現,掌握這三個類別方法足以應對 90% 的實戰場景,避免過度設計。
TThread.CreateAnonymousThread(); { 建立匿名執行緒,適合短期任務 }
TThread.Queue(); { 非同步佇列到主執行緒,不阻塞背景執行緒 }
TThread.Synchronize(); { 同步佇列到主執行緒,阻塞背景執行緒直到完成 }
| 方法 | 阻塞性 | 適用場景 | 範例 |
|---|---|---|---|
CreateAnonymousThread | 無 | 背景運算、檔案 IO、網路請求 | 耗時計算不凍結 UI |
Queue | 非阻塞 | UI 更新、日誌記錄、進度回報 | 背景執行緒繼續跑,主執行緒稍後處理 |
Synchronize | 阻塞 | 需即時結果的 UI 操作、共享資源存取 | 背景執行緒暫停等待主執行緒完成 |
TThread.CreateAnonymousThread(
procedure
begin
{ 背景耗時工作 }
DoHeavyWork();
{ 非同步更新 UI,不阻塞背景 }
TThread.Queue(nil,
procedure
begin
UpdateUI();
end);
end).Start;
核心原則:背景執行緒絕不直接操作 VCL/FMX 控制項,一律透過 Queue (首選) 或 Synchronize 切換到主執行緒執行 UI 邏輯。