快速业务通道

Eclipse客户端程序中多线程的使用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
此添加获取数据的代码          Display.getDefault().asyncExec(new Runnable(){    public void run(){      // 在此添加更新界面的代码    } });    }      };      job.schedule();    }    });

延时执行Job,避免无用的Job运行

我们经常需要根据选中的对象刷新我们部分的界面元素。如果我们连续很快的改变选择,而每次刷新 界面涉及到的区域比较大时,界面会出现闪烁。从用户的角度来说,我们很快的改变选择,希望看到的只 是最后选中的结果,中间的界面刷新都是不必要的。

在Jface中,StructuredViewer提供了addPostSelectionChangedListener方法。如果我们使用这个方 法监听selectionChanged事件,当用户一直按着方向键改变选中时,我们只会收到一个selectionChanged 事件。这样我们可以避免过度的刷新界面。

实际上,Jface中就是通过延时执行Job来实现这一功能的。我们也可以自己实现类似功能:

private final static Object UPDATE_UI_JOBFAMILY = new Object(); tableviewer. addSelectionChangedListener (new ISelectionChangedListener (){    public void selectionChanged(SelectionChangedEvent event){      Job.getJobManager().cancel(UPDATE_UI_JOBFAMILY);      new UIJob("更新界面") {            protected IStatus runInUIThread (IProgressMonitor monitor) {                 //更新界面                return Status.OK_STATUS;            }        public boolean belongsTo(Object family){          return family== UPDATE_UI_JOBFAMILY;        }          }.schedule(500);    } });

首先,我们需要将界面更新的代码放到一个UIJob中,同时我们将Job延时500毫秒执行(我们可以根据 需要改变延时的时间)。如果下一个selectionChanged事件很快到来,我们的调用Job.getJobManager ().cancel(UPDATE_UI_JOBFAMILY)将以前未运行的Job取消,这样只有最后一个Job会真正运行。

Eclipse客户端程序中多线程的使用(5)

时间:2011-08-11 IBM 梁 骞

在UI线程中等待非UI线程的结束

有时,我们在UI线程中需要等待一个非UI线程执行完,我们才能继续执行。例如,我们在UI线程中要 显示某些数据,但是这些数据又需要从数据库或者远程网络获取。于是,我们会启动一个非UI的线程去获 取数据。而我们的UI线程必须要等待这个非UI线程执行完成,我们才能继续执行。当然,一种简单的实现 方法是使用join。我们可以在UI线程中调用非UI线程的join方法,这样我们就可以等待它执行完了,我们 再继续。但是,这会有一个问题。当我们的UI线程等待时,意味着我们的程序不会再响应界面操作,也不 会刷新。这样,用户会觉得我们的程序象死了一样没有反应。这时,我们可以使用ModalContext类。你可 以将你要执行的获取数据的任务用ModalContext的run方法来运行(如下)。ModalContext会将你的任务 放到一个独立的非UI线程中执行,并且等待它执行完再继续执行。与join方法不同的是,ModalContext在 等待时不会停止UI事件的处理。这样我们的程序就不会没有响应了。

try {   ModalContext.run(new IRunnableWithProgress(){    public void run(IProgressMonitor monitor)    throws InvocationTargetException, InterruptedException {    /*需要在非UI线程中执行的代码*/    ModalContext.checkCanceled(monitor);    }     }, true, new NullProgressMonitor(), Display.getCurrent());   } catch (InvocationTargetException e) {   } catch (Interrupted

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号