1

我有一个 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();
           }
         }  
     }
 }

不幸的是,我在工作和类似的事情上经验很少,所以如果有人能提供帮助,这将是非常有帮助的。

再举一个例子,如果有人在我们的应用程序中快速按下 control-N 20 次,它会迅速创建 20 个新状态,我们只想在这 20 个通知结束时更新 UI,而不是刷新 20 次。

4

1 回答 1

0

如果我理解正确,Eclipse 会为您提供所需的一切。首先,应该在显示线程上更新 GUI。其次,还有一种异步执行的方法,如下:

final IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getDisplay().asyncExec(new Runnable() {
  public void run() {
    // Do your thing, e.g. refresh()
  }
});

您在 Runner 中执行的操作取决于 GUI 框架。如果您使用的是 JFace,则可以执行 refresh(),我认为这对于排队工作很聪明。

于 2013-04-24T08:28:00.843 回答