问题描述
如果我有以下循环:
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);
但是似乎它在循环结束时仅刷新一次。在必须快速刷新图表时,我应该遵循最佳实践吗?
解决方法
此代码在UI线程中运行,并且将阻止UI更新,直到您返回到主Display.readAndDispatch
循环为止。主UI线程中的代码必须快速执行并尽快返回主循环。仅在执行readAndDispatch
时更新UI。
因此,您不能在UI线程中使用简单的for
循环来更新图表。
一种方法是在延迟后使用Display.timerExec
运行单个步骤。
或者您可以启动一个后台线程并将循环放在此处。您必须从后台线程调用Display.syncExec
来运行更新UI的代码。