在RCP程序中,常碰到某個(gè)線(xiàn)程執(zhí)行時(shí)間比較很長(zhǎng)的情況,若處理不好,用戶(hù)體驗(yàn)度是很糟糕的,如用戶(hù)點(diǎn)了一個(gè)功能按鈕后,進(jìn)入功能執(zhí)行,發(fā)現(xiàn)程序長(zhǎng)時(shí)間沒(méi)有任何響應(yīng),無(wú)疑這種情況下,用戶(hù)是無(wú)法忍受的。
在這種情況下我們可以通過(guò)提供進(jìn)度條對(duì)話(huà)框來(lái)改善用戶(hù)體驗(yàn)度:
1)單步執(zhí)行
程序執(zhí)行期間不允許用戶(hù)終止,貼下程序代碼段






















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






























