怎麼正確的使用SWT進度條

2021-04-15 16:43:29 字數 2451 閱讀 2611

摘要

使用進度條監視器並不像看起來的那麼簡單,在使用時很容易犯錯。這取決於各種因素,像底層實現,顯示方式,是否被設定固定數目的工作條目,是否使用了

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 巢狀,等等。結果可能是完全沒問題,也可能是 讓人撓頭,或者徹底不可用。本文將指導怎樣有效的使用進度條監視器。在許多簡...