SWTChart 在循环内时不重绘
SWTChart not redraw when it is inside a loop
如果我有以下循环:
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);
}
图表刷新不够快,即使我在循环中添加延迟也是如此。我不得不最小化 window 然后最大化它以查看更改,换句话说,它不会在每次循环后刷新,我试图通过在循环中添加以下行来强制刷新:
plot.redraw();
plot.layout(true, true);
但似乎它只在循环结束时刷新一次。在必须快速刷新图表时,是否有我应该遵循的最佳做法?
此代码 运行 正在 UI 线程中运行,并且会阻止 UI 更新,直到您 return 进入主 Display.readAndDispatch
循环。主UI线程中的代码必须快速执行,并尽快return进入主循环。 UI 仅在执行 readAndDispatch
时更新。
因此您不能在 UI 线程中使用简单的 for
循环来更新图表。
一种方法是在延迟后使用 Display.timerExec
到 运行 一步。
或者您可以启动后台线程并将循环放在那里。从后台线程,您必须调用 Display.syncExec
到 运行 更新 UI.
的代码
如果我有以下循环:
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);
}
图表刷新不够快,即使我在循环中添加延迟也是如此。我不得不最小化 window 然后最大化它以查看更改,换句话说,它不会在每次循环后刷新,我试图通过在循环中添加以下行来强制刷新:
plot.redraw();
plot.layout(true, true);
但似乎它只在循环结束时刷新一次。在必须快速刷新图表时,是否有我应该遵循的最佳做法?
此代码 运行 正在 UI 线程中运行,并且会阻止 UI 更新,直到您 return 进入主 Display.readAndDispatch
循环。主UI线程中的代码必须快速执行,并尽快return进入主循环。 UI 仅在执行 readAndDispatch
时更新。
因此您不能在 UI 线程中使用简单的 for
循环来更新图表。
一种方法是在延迟后使用 Display.timerExec
到 运行 一步。
或者您可以启动后台线程并将循环放在那里。从后台线程,您必须调用 Display.syncExec
到 运行 更新 UI.