我正在开发一个 Eclipse RCP 应用程序插件,并且TreeViewer
在某个时候遇到了问题,它有一个包含很多子元素的树项。在这种情况下,它是 4000。
具有TreeViewer
a ContentProvider
、 aLabelProvider
和输入(在本例中为模型提供者)。
4000 个元素的s方法cell.setImage(...)
中的方法需要几秒钟以上的时间。我试过跳过它,
没有问题......StyledCellLabelProvider
update(ViewerCell cell)
TreeViewer
我还考虑过在单独的线程中进行更新,方法是调用:
Display.getDefault().asyncExec(new UpdateItems(list));
和可运行...
private class UpdateItems implements Runnable {
private List<Element> elementList;
private UpdateItems(List<Element> elementList) {
this.elementList = elementList;
}
@Override
public void run() {
System.out.println("It's running!!!!");
for (Element e : elementList) {
Signal s = (Signal) e;
s.setShowIcon(true);
s.updateElement(); //this calls an update on the item
}
}
}
但是这样,当我尝试使用滚动查看下部元素时,窗口会冻结直到完成。
有什么方法可以在 a 上添加一个侦听TreeViewer
器以便在 aTreeItem
可见时触发更新?可见我的意思是它在当前视图内的用户视线范围内,在当前滚动的位置(希望这是有道理的)。
任何支持和意见表示赞赏!