摘要使用進度條監視器並不像看起來的那麼簡單,在使用時很容易犯錯。這取決於各種因素,像底層實現,顯示方式,是否被設定固定數目的工作條目,是否使用了
subprogres**onitor 巢狀,等等。結果可能是完全沒問題,也可能是 讓人撓頭,或者徹底不可用。
本文將指導怎樣有效的使用進度條監視器。
在許多簡單的慣例中,有一條是「只知道所知道的,並且僅限於此」。這就是說,不能假設完全了解你所不知道的事情。就像,你不能想當然的認為進度條監視器就是你在ide中看到的那些樣子的東西。通常,所有的進度條操作都是通過
iprogres**onitor介面.進度條監視器具有4中狀態,通過介面只可以測到一種狀態(當監視器被取消時)。狀態的改變是通過如下方法的作用:
begintask(),
done() and
setcanceled().
要以以下的模式使用進度條:
monitor = ?
// 獲取進度條例項,現在處於 pristine 狀態
tryfinally
the 一定到保證
done() 最後被執行。begintask()被呼叫不要多於一次,這種錯誤經常發生。進度條被傳給子任務,子任務沒有意識到進度條已經執行了
begintask(),還是按照規定的契約,執行
begintask()方法。除非子任務對此了解,否則傳遞進度條例項是十分錯誤的。一般情況下,接受到進度條例項的**應該假設此例項自己會遵守
begintask()/
done()契約。如果子任務也需要進度條,就應該使用
subprogres**onitor作為**,封裝傳入的進度條例項。
如下為樣例:
monitor = ?// 獲取進度條例項
tryfinally
每乙個
dowork()呼叫得到乙個新的
subprogres**onitor 例項。如果確實不知道確切的條目總數,不要隨意猜測數字。如果猜大了,數字會走的很慢,然後突然到達100%;如果猜小了,那麼會很快到達終點,並且永遠停在那裡。沒有確切總數的話,填寫
iprogres**onitor.unknown就可以了。通常你可以通過兩種方式得出你究竟要處理多少條目:一是呼叫許多不同的方法來得到結果,二是在乙個集合中為每乙個例項呼叫同乙個方法。每種方式你都可以知道總的條目數(方法的個數或集合的大小)。
你應該將按比例測量出你的總數。如果總數是3 (每個條目工作為
worked(1)),你可以把比例定為1000,總數為3000, (每個條目工作為
worked(1000) ). 當你要通過subprogres**onitor將工作傳遞到子任務中,就要應用這種方式。因為子任務內部的總數和外部是不同的,也許比你定的總數大許多。你要給它們一些緩衝潤滑的空間。這樣可以避免進度條執行時視覺上的便扭。
樣例:
monitor = ?
// 取到進度條監視器
int total = 3 // 總數為3
tryfinally
這裡沒有必要按比例放大,也沒有集合動態計算。
更詳細的樣例:
monitor = ?
int total = thingylist.size() * 3 + 2
try// 最後一條
this.doafterallthingies()
monitor.worked(1)
}finally
在使用子任務的時候,子任務的總數就是分配給它的比例數。
monitor = ?
int scale = 1000
int total = 3
tryfinally
you
worked().
不要將 iprogres**onitor.unknown 傳給建立的 subprogres**onitor()
子任務進度條的實現只是盲目的使用傳入的總數進行計算,當它接受到的是乙個負值(
iprogres**onitor.unknown為-1) 它也是按照慣例來進行計算,所以你看到的結果是進度條往回走。
iprogres**onitor.unknown不能在子任務進度條中使用,但是在父進度條中使用沒有這種問題。上面的例子中,都沒有判斷進度條是否被取消。在實際使用中,推薦要及時的進行判斷。
monitor = ?
try
}finally
這樣可以使呼叫者不用必須傳入monitor,只要輸入null 就可以了。
public void doit(iprogres**onitor monitor)
}finally }
只要遵循這些規則,在使用進度條的時候就不會碰到麻煩。如果不信邪,想當然的用,遲早會出現奇怪的視覺顯示,你的客戶又要不停的抱怨了。
怎麼正確的使用SWT進度條
摘要 使用進度條監視器並不像看起來的那麼簡單,在使用時很容易犯錯。這取決於各種因素,像底層實現,顯示方式,是否被設定固定數目的工作條目,是否使用了 subprogres onitor 巢狀,等等。結果可能是完全沒問題,也可能是 讓人撓頭,或者徹底不可用。本文將指導怎樣有效的使用進度條監視器。在許多簡...
怎麼正確的使用SWT進度條
摘要 使用進度條監視器並不像看起來的那麼簡單,在使用時很容易犯錯。這取決於各種因素,像底層實現,顯示方式,是否被設定固定數目的工作條目,是否使用了 subprogres onitor 巢狀,等等。結果可能是完全沒問題,也可能是 讓人撓頭,或者徹底不可用。本文將指導怎樣有效的使用進度條監視器。在許多簡...
怎麼正確的使用SWT進度條
摘要使用進度條監視器並不像看起來的那麼簡單,在使用時很容易犯錯。這取決於各種因素,像底層實現,顯示方式,是否被設定固定數目的工作條目,是否使用了 subprogressmonitor 巢狀,等等。結果可能是完全沒問題,也可能是 讓人撓頭,或者徹底不可用。本文將指導怎樣有效的使用進度條監視器。在許多簡...