2011-05-08 81 views
2

好吧,所以我發現了一些相當奇怪的行爲,同時搞亂了WPF ProgressBar控件。此控件位於ListView控件的列中,其實質與this question & answer幾乎沒有什麼不同。WPF ProgressBar在更新速度過快時會失去光澤 - bug?

我由幾個屬性(MinMaxValue),所有單向綁定明顯的手段結合Progressbar一類。此另一個類是從另一個線程更新的,並定期使用接口讓ProgressBar知道狀態正在進行。這一切都很好!

但這裏是奇怪的地方。我的ProgressBar失去光芒......直到達到Max(= 100%)的價值。然後它突然開始在綠色酒吧裏閃爍着白色的光芒,這非常煩人。我有一個理由表現出進步,而一旦你開始注意到它不在那裏,缺乏脈搏實際上很讓人分心。

因此,我啓動了調試。我發現Thread.Sleep(1000)在我的線程處理中,它仍然隱藏着光芒,但是如果我將它撞到Thread.Sleep(1500),那麼輝煌就會隨時回到瘋狂的活力。之後,我嘗試將我的進度單位轉換爲較小的數字,因此整數值需要更長的時間才能更改。 Min 0,Max 100仍然缺乏光芒。最低0分,最高10分的輝光以充滿活力迴歸。在所有情況下,花費達到100%的工作量和時間是相同的,但對於輝光顯示來說,這是一個非常明顯的二元化YES/NO效果。我沒有測試過的唯一的事情是,當ProgressBar沒有放在這個ListView控件中時它是否也會發生。

我對自己非常瞭解,無法理解ProgressBar控件所涉及的(XAML)的深層WPF內部。所以我希望這裏的任何人都知道這是一個已知的bug,他們偶然發現的東西,或者他們甚至可能知道如何解決/修復的東西。

我的機器運行Windows 7,並且我正在VS2010中開發針對.NET Framework 4 Client Profile。

回答

0

我會猜測,並說你失去了輝光,因爲你正在更新你的進度條經常。 每當你設置一個新的值時,進度條重新開始發光的動畫(我想 - 我還沒有測試過這個,我正在試着去掉頭頂)。

看來你也許已經想到了同樣的事情,並試圖解決它,但我不知道你已經完全用盡了所有的可能性:

  1. 嘗試創建一個檢查,如果(進度。值== newValue)不要做progressbar.Value = newValue;
  2. 進度條應該使用小數,最大值,小數值。確保你沒有更新每個小數點,例如。 - 10,1; 10,2; 10,3;等等...(使用progressbar.Value =(int)newValue;)
  3. 嘗試以更大的增量設置進度條值,而不是increment = 1,使用increment = 10;
  4. 你可以嘗試在ListView之外進度條,也許會有一個進度條在裏面的渲染錯誤。

PS!如果您非常快速地更新進度條,則發光動畫無法運行。請記住,輝光分辨的目的僅在於顯示應用程序仍在運行(機器尚未凍結),儘管進度(條)未移動。
如果進展很快,那麼對於用戶來說這是一種視覺效果,所以沒有必要在那個時候有發光動畫......