簡體   English   中英

為什么某些Windows UI元素立即更新而其他Windows UI元素卻不更新?

[英]Why do some Windows UI elements update immediately and others do not?

我們有一個按鈕單擊事件,它將啟動一個長期運行的任務,該任務將更新狀態欄標簽和進度控件以提供用戶反饋。 在將任務移到單獨的線程之前,我們注意到狀態標簽{label.text =“ some message”; }(通常)會立即更新,而進度條和某些自定義控件通常不會更新,直到函數完成並且主UI線程再次開始發送消息為止(考慮到主UI線程,這才是有意義的)。
但這使我們想知道-是否某些Windows控件直接重繪而不是發出WM_Paint消息?

您的發現與我對.NET控件的了解相矛盾。 通用規則是,更改Text屬性或更改諸如ForeColor或BackColor之類的屬性只會導致調用Invalidate()方法。 當UI線程再次開始泵送消息時,這最終導致傳遞WM_PAINT消息。 您可以調用控件的或Form的Update()方法,以強制在輸入慢速代碼之前執行所有待處理的繪制。 這完全是Windows的標准行為。

一個特殊情況是ProgressBar控件。 它的本機Windows實現直接更新鋼筋長度。 這是兼容行為,該控件通常用於無法正常運行的代碼中。

TextBox具有特殊的繪畫行為,它部分地直接繪畫到窗口,而不是通過WM_PAINT消息處理程序。 這是Windows 2需要在386SUX計算機上正常工作時的傳統行為方式。 但這與這種情況無關。

當然,不要為這個煩惱而已,而應該永遠不要把自己放在任何有重要意義的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM