0

我正在开发一个 Eclipse RCP 应用程序插件,并且TreeViewer在某个时候遇到了问题,它有一个包含很多子元素的树项。在这种情况下,它是 4000。

具有TreeViewera ContentProvider、 aLabelProvider和输入(在本例中为模型提供者)。

4000 个元素的s方法cell.setImage(...)中的方法需要几秒钟以上的时间。我试过跳过它, 没有问题......StyledCellLabelProviderupdate(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可见时触发更新?可见我的意思是它在当前视图内的用户视线范围内,在当前滚动的位置(希望这是有道理的)。

任何支持和意见表示赞赏!

4

0 回答 0