<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一杯清茶

    統計

    留言簿

    Oracle SQL/PLSQL

    PowerDesigner教程系列

    Struts2.0

    web開發

    三人行

    從事RCP開發的同行

    工作流和權限設置

    閱讀排行榜

    評論排行榜

    Eclipse RCP中超長任務單線程,異步線程處理

    轉自:http://m.tkk7.com/mydearvivian/articles/246028.html

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

                    ProgressMonitorDialog progress = new ProgressMonitorDialog(null); 
                    
    try {
                        progress.run(
    truefalsenew IRunnableWithProgress() {
                            
    public void run(IProgressMonitor monitor) throws InvocationTargetException,    InterruptedException {
                                monitor.beginTask(
    "復制文件", IProgressMonitor.UNKNOWN);
                                monitor.setTaskName(
    "復制文件");
                                Console.getInstance().info(
    "正在復制文件,請稍候");

                                copyFile(fileName, destFolder);
                                
                                monitor.done();
                                Console.getInstance().info(
    "復制成功");
                            }
     
                        }
    );
                    }
     catch (InvocationTargetException e) {
                        e.printStackTrace();
                    }
     catch (InterruptedException e) {
                        e.printStackTrace();
                    }

     

        若允許用戶終止任務執行 則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線程的時間。

            也貼上例子吧:

     

    Job job = new Job("執行異步線程"{
        
    protected IStatus run(final IProgressMonitor monitor) {    
            monitor.beginTask(
    "開始任務", IProgressMonitor.UNKNOWN);
            monitor.setTaskName(
    "Step 1");
            Console.getInstance().info(
    "開始第一步");
            dothing1();
            monitor.setTaskName(
    "Step 2");
            Console.getInstance().info(
    "開始第二步");
            dothing2();
            monitor.setTaskName(
    "Step 3");
            Console.getInstance().info(
    "開始第三步");
            dothing3();
            Console.getInstance().info(
    "完畢");                                                                            
            monitor.done();    
            Display.getDefault().asyncExec(
    new Runnable() {                        
                
    public void run() {                                                                                    
                    
    //UI任務
                }

            }
    );
            
    return Status.OK_STATUS;
        }

    }
    ;
    job.setUser(
    true);
    job.schedule();    

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

    評論

    # re: Eclipse RCP中超長任務單線程,異步線程處理 2009-07-09 04:13 jadmin

    很好,學習了  回復  更多評論   

    主站蜘蛛池模板: 麻豆国产入口在线观看免费| 91免费精品国自产拍在线不卡| 亚洲AV中文无码乱人伦在线视色| 亚洲国产成人精品无码区二本 | A国产一区二区免费入口| 成人午夜亚洲精品无码网站| 国产免费一级高清淫曰本片| 91麻豆精品国产自产在线观看亚洲| 国产福利免费视频 | 亚洲综合无码精品一区二区三区| 一级毛片免费不卡| 亚洲国产美女精品久久久久∴| 国产亚洲精品免费视频播放| 亚洲AV无码一区二区乱孑伦AS| 在线免费中文字幕| 亚洲综合国产成人丁香五月激情| 日本免费人成黄页在线观看视频 | 国产亚洲AV夜间福利香蕉149| 两个人www免费高清视频| 亚洲VA中文字幕无码一二三区| 182tv免费视视频线路一二三 | 最新亚洲人成网站在线观看| 亚洲AV无码一区二三区| 99久久99这里只有免费的精品| 日韩精品一区二区亚洲AV观看| 最近中文字幕mv免费高清电影| 色费女人18女人毛片免费视频| 韩国亚洲伊人久久综合影院| 亚洲 自拍 另类小说综合图区 | 亚色九九九全国免费视频| 亚洲国产av玩弄放荡人妇| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 又硬又粗又长又爽免费看| 亚洲AV永久无码精品成人| 成人免费无码视频在线网站| 免费人成网站永久| 亚洲黄色免费网址| 伊人久久亚洲综合影院| 最近中文字幕mv免费高清在线| 亚洲另类无码专区丝袜| 亚洲精品无码鲁网中文电影|