在 Delphi 中,當程式進入長時間循環或耗時運算時,主執行緒會被佔用,導致訊息佇列無法被處理,表現為視窗無法拖動、按鈕無反應、甚至系統標示為「未回應」。
Application.ProcessMessages 的作用是暫時將控制權交還給系統,讓訊息迴圈處理掛起的 Windows 訊息(重繪、滑鼠、鍵盤、計時器等),處理完畢後再繼續執行後續程式碼。
GetMessage/DispatchMessage)。ProcessMessages 相當於手動執行一次「取訊息→分派」循環,清空佇列。for i := 1 to 10000 do begin
// 耗時運算
DoHeavyWork(i);
// 每 100 次讓介面回應一次
if (i mod 100) = 0 then
Application.ProcessMessages;
// 可檢查使用者是否點擊取消按鈕
if UserCancelled then Break;
end;
ProcessMessages 期間使用者再次觸發相同操作,可能導致遞迴呼叫,需用旗標防護。TThread、Task),主執行緒僅負責 UI 更新。Application.ProcessMessages 是 Delphi 傳統單執行緒架構下緩解介面假死的應急手段,現代開發應優先考慮多執行緒設計,將耗時邏輯移出主執行緒。