Eclipse RCP:Display.getDefault().asyncExec 等待超过 4000 毫秒才能执行

Eclipse RCP: Display.getDefault().asyncExec waits more than 4000ms to execute

我正在使用 TreeViewer 并创建作业来刷新添加了 4k - 5k 节点的 Treeview。在 Refresh Job 中,我调用 Display.getDefault().asyncExec 来执行 getTreeViewer().refresh() 方法。但是,我遇到了 getTreeViewer().refresh() 必须等待 4000 毫秒或更长的时间才能到达 运行 的问题。这是在 Ubuntu 和 Windows 必须等待超过 30000 毫秒。

不知道为什么要等很久才能执行

asyncExec 尽快在 SWT 用户界面线程上运行。因此,如果它被延迟,则必须有其他东西在使用该线程。由于您有一棵大树,可能是 TreeViewer 构建树导致了延迟(除非您是 运行 在 UI 线程中花费很长时间的东西)。

对于大树,您可能需要考虑使用 SWT.VIRTUAL 样式创建树并使用 ILazyTreeContentProvider 内容提供程序。