2015-11-08 22 views
1

當我打開一個大型查詢時,我希望使用新的西雅圖TactivityIndi​​cator,但是這阻止了主要的vcl線程,因此停止了TActivityIndi​​cator。當它在主線程中運行時,新的Delphi TActivityIndi​​cator有什麼用?

當然,TActivityIndi​​cator指示活動,應該在不同的線程中工作。

無需放入Application.Processmessages無處不在有另一種方式嗎?

+1

該指標應該在主線程中工作,而您的任務應該在工作線程中完成其工作。 –

+0

因此,我重新設計我的應用程序以適應活動指標?我寧願希望這將是相反的。 –

+2

這是不現實的。當你在UI線程上放置長時間運行的任務時,你犯了錯誤。沒有任何魔力可以超過這個錯誤。你必須修復它。將長期運行的任務放在工人身上。哦,並且不要調用ProcessMessages。 –

回答

1

UI只能從主線程更新。活動指標也必須遵守該規則。改爲將您的活動置於不同的線程中。然後你的應用程序將保持響應。

+0

謝謝塞巴斯蒂安。然而,我希望讓應用程序被阻止,讓用戶等待查詢,同時欣賞漂亮的捻轉點,而不需要深入研究線程。 –

+0

您可以禁用UI並在工作線程運行時顯示活動指示器,然後停止指示器並解鎖工作線程完成時的UI。這樣,用戶仍然需要等待,但它可以讓UI線程保持響應,以便在工作線程繁忙時處理來自OS的UI消息。 –

+0

從線程你也可以更新主窗體/線程中的東西。 '同步( \t程序 開始 \t \t .......... 結束 );' – Zam

3

新的VCL UI活動指示器是一種旨在反映Windows 10外觀的進度指示器。就像任何其他的VCL控件一樣,遵循通常的VCL線程規則。所有對控件的訪問必須來自UI線程。

因此,您需要從UI線程創建並顯示指標。你需要確保UI線程永遠不被阻塞。這意味着任何長時間運行的任務都必須運送到工作線程,以便它們不會阻塞UI線程。

加ça變化,再加上c'estlamême選擇。

相關問題