我正在研究基于RCP的应用程序,我需要用结果行填充屏幕。现在,只要我有少量数据,例如300行,我的应用程序就可以正常运行。在300行之后如果我点击在“显示更多”按钮上显示更多结果,UI变得无法响应。我确实尝试了Display().getCurrent().asyncExec()
和Display().getCurrent().syncExec()
。我没有得到预期的结果.Below是代码段。
private void setResults(final SearchResultData results) {
int totalHits = 0;
this.results = results;
setMoreResultsBtnVisible(false);
setResultHeadingText(offset, totalHits);
if (results != null && !results.getResults().isEmpty()) {
totalHits = results.getTotalHits();
setResultHeadingText(offset, totalHits);
final boolean showMore = offset < totalHits;
Display.getCurrent().syncExec(new Runnable() {
@Override
public void run() {
if (scrolledResultList != null && !scrolledResultList.isDisposed()) {
populateList(results.getResults());
setMoreResultsBtnVisible(showMore);
scrolledResultList.layout();
resizeScrollableComposite();
}
}
});
}
}
答案 0 :(得分:0)
您在UI线程中运行的任何代码都会使UI无响应,直到完成为止。使用来自UI线程代码的syncExec
或asyncExec
并没有帮助。
您需要将长时间运行的代码放在Eclipse Job
或后台线程中。然后,您必须使用syncExec
或asyncExec
仅用于实际访问UI控件的代码(尝试直接访问控件将失败)。