1

如果我有以下循环:

Chart plot = new Chart(composite, SWT.NONE);
ISeriesSet seriesSet = plot.getSeriesSet();
ISeries series = seriesSet.createSeries(SeriesType.LINE, "Test");

for(int i=0; i<1000; i++) {
    points = ...
    series.setYSeries(points);
}

即使我在循环中添加了延迟,图表也没有足够快地刷新。我必须最小化窗口然后最大化它以查看更改,换句话说,它不会在每次循环后刷新,我试图通过在循环中添加以下行来强制刷新:

plot.redraw();
plot.layout(true, true);

但似乎它只在循环结束时刷新一次。必须快速刷新图表时,我应该遵循最佳实践吗?

4

1 回答 1

2

此代码在 UI 线程中运行,将阻止 UI 更新,直到您返回主Display.readAndDispatch循环。主 UI 线程中的代码必须快速执行并尽快返回主循环。UI 仅在readAndDispatch执行时更新。

所以你不能for在 UI 线程中使用简单的循环来更新图表。

一种方法是Display.timerExec在延迟后运行单个步骤。

或者你可以启动一个后台线程并将你的循环放在那里。您必须从后台线程调用Display.syncExec以运行更新 UI 的代码。

于 2020-11-08T08:26:36.893 回答