Eclipse RCP中超長任務單線程,異步線程處理
轉自:http://www.tkk7.com/mydearvivian/articles/246028.html
在RCP程序中,常碰到某個線程執行時間比較很長的情況,若處理不好,用戶體驗度是很糟糕的,如用戶點了一個功能按鈕后,進入功能執行,發現程序長時間沒有任何響應,無疑這種情況下,用戶是無法忍受的。
在這種情況下我們可以通過提供進度條對話框來改善用戶體驗度:
1)單步執行
程序執行期間不允許用戶終止,貼下程序代碼段






















若允許用戶終止任務執行 則progress.run()第二個參數傳true即可; monitor.isCanceled()方法判斷當前是否被用戶取消
2)異步執行
在RCP中要在非UI線程中執行UI線程的操作,最簡單的方式就是display.syncExec或者display.asyncExec,如果UI線程所需的時間較長的話,則應該使用display.asyncExec
在執行異步線程的時候,我們一般應當繼承Job或者UIJob類:UIJob是在UI線程中運行的,可以直接訪問窗體組件。Job是在非UI線程中運行,如果在里面想訪問窗體組件,需要通過Display.asynExec()或者synExec方式來執行。UIJob要盡量的短,不要過多的占用UI線程的時間。
也貼上例子吧:






























posted on 2009-07-08 14:50 一杯清茶 閱讀(1275) 評論(1) 編輯 收藏 所屬分類: RCP