我正在开发一个Eclipse RCP应用程序插件,并且遇到TreeViewer
的问题,在某个点上,它有一个包含很多子元素的Tree Item。在这种情况下,它是4000。
TreeViewer
有ContentProvider
,LabelProvider
和输入(在本例中为modelprovider)。
4000个元素的cell.setImage(...)
StyledCellLabelProvider
方法中的update(ViewerCell cell)
方法需要花费几秒钟的时间。我试过跳过它和
TreeViewer
没有问题......
我还考虑通过调用:
在单独的线程中进行更新Display.getDefault().asyncExec(new UpdateItems(list));
和Runnable ......
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
}
}
}
但是这样,当我尝试使用滚动查看下面的元素时,窗口会冻结直到完成。
是否可以在TreeViewer
上添加侦听器,以便在TreeItem
可见时触发更新?并且通过可见我的意思是它在当前视图内的用户的视线内,在当前滚动的位置(希望这是有意义的)。
感谢任何支持和意见!