我有一個應用程序,在執行後臺任務時,會顯示一個帶有「估計剩餘時間」計算(例如「剩餘5秒」)和「預計完成時間」的進度條(例如「12:59完成:59「),或者我稱之爲ETA。如何從我的「估計剩餘時間」(和ETA)計算中消除「抖動」?
用於計算此ETA的算法基本上取了一段時間內的「滾動平均」進度:
1.每個進度事件都被添加到當前時間的隊列中。
2.經過一段時間(例如10秒)後,將項目從隊列中移除。
3. ETA從隊列中的第一個和最後一個項目推斷出來。
的源代碼可用,如果你不在意:ETACalculator.cs
然而,有一個抖動問題。當每個進度事件被添加到計算中時,ETA將稍微更新。假設ETA只改變了0.1s
。這種小的抖動很容易導致ETA「抖動」。例如,我沒有看到從5s,4s,3s等順利進展...,我看到5-5-5-4-5-4-5-4-5-4-4-4。
我正在考慮將更新降低到每秒1次,但進度條不那麼流暢,而且我真的很希望實時顯示「實際」減速。
我很難想出一個簡單的算法來減少這種跳動的抖動。我怎樣才能消除抖動?
Winforms? WPF?還有別的嗎?你能發佈相關的代碼嗎? – Oded 2012-01-15 16:22:44
Oblicatory [xkcd參考](http://xkcd.com/612/)。 – Ani 2012-01-15 16:24:09
如果減少,只更新進度。 (即如果我們目前在4以上,不要改回5)。 – 2012-01-15 16:29:10