我有一个econtent适配器,它本质上导致了大量表的刷新。虽然从理论上讲,可以将所有通知筛选到应该引起表刷新的确切通知,但这将非常困难和耗时,因为我们有一个庞大的模型,以及许多可能触发刷新的不同事件和更改。此外,经常发生的是单个"用户事件"(如我们的应用程序中的点击状态->新建),触发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();
}
}
}
}
不幸的是,我在工作和诸如此类的事情上几乎没有经验,所以如果有人能帮助我做这件事的正确方式,那将是非常有帮助的
举个例子,如果有人在我们的应用程序中快速点击control-N 20次,它将快速创建20个新状态,我们只想在这20个通知结束时更新UI,而不是刷新20次。
如果我理解正确,Eclipse将为您提供所需的一切。首先,GUI应该在Display线程上更新。其次,有一种异步执行的方法,如下所示:
final IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getDisplay().asyncExec(new Runnable() {
public void run() {
// Do your thing, e.g. refresh()
}
});
在Runner中执行的操作取决于GUI框架。如果你使用的是JFace,你可以做一个refresh(),我认为这对于排队工作来说是明智的。