我有一个econtent适配器,它实质上导致了许多表的刷新。虽然理论上可以将所有通知过滤到应该导致表刷新的确切通知,但由于我们有一个庞大的模型,许多不同的事件和变化可能会触发,因此非常困难和耗时。刷新。此外,经常发生的是单个“用户事件”(如在我们的应用程序中单击state-> new),触发在幕后创建的4个对象,从通知的角度来看,所有这些对象都非常相似,因此很难过滤掉。我想知道是否有一种很好的方法来做某种“延迟工作”,这样4个通知只会导致一次刷新。例如,类似于:
public void notifyChanged(final Notification notification)
super.notifyChanged(notification);
@Override
public void run() {
if(matchesFilters(notification)) {
//some sort of check to see if we recently had another event that would have triggered a refresh?
if(!schedulingJob) {
scheduleDelayedJob();
}
}
}
}
不幸的是,我在工作和类似的事情上几乎没有经验,所以如果有人能够以正确的方式提供帮助,那将会非常有帮助。
作为另一个例子,如果有人在我们的应用程序中非常快速地点击控制-N 20次,它将快速创建20个新状态,我们只想在这20个通知结束时更新UI,而不是刷新20次。
答案 0 :(得分:0)
如果我理解正确,Eclipse会为您提供所需的一切。首先,应该在Display线程上更新GUI。其次,有一种异步执行的方法,如下所示:
final IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getDisplay().asyncExec(new Runnable() {
public void run() {
// Do your thing, e.g. refresh()
}
});
您在Runner中所做的工作取决于GUI框架。如果你正在使用JFace,你可以做一个refresh(),我认为这是排队工作的明智之处。