Eclipse客户端程序中多线程的使用 - 编程入门网
此添加获取数据的代码
Display.getDefault().asyncExec(new Runnable(){
public void run(){
// 在此添加更新界面的代码
}
});
}
};
job.schedule();
}
});
延时执行Job,避免无用的Job运行 我们经常需要根据选中的对象刷新我们部分的界面元素。如果我们连续很快的改变选择,而每次刷新 界面涉及到的区域比较大时,界面会出现闪烁。从用户的角度来说,我们很快的改变选择,希望看到的只 是最后选中的结果,中间的界面刷新都是不必要的。 在Jface中,StructuredViewer提供了addPostSelectionChangedListener方法。如果我们使用这个方 法监听selectionChanged事件,当用户一直按着方向键改变选中时,我们只会收到一个selectionChanged 事件。这样我们可以避免过度的刷新界面。 实际上,Jface中就是通过延时执行Job来实现这一功能的。我们也可以自己实现类似功能:
首先,我们需要将界面更新的代码放到一个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事件的处理。这样我们的程序就不会没有响应了。
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |