将工作添加到Eclipse中的Job的进度监视器

zvi*_*ico 4 eclipse eclipse-rcp

我有一个在Eclipse中运行的工作(扩展org.eclipse.core.runtime.jobs.Job的类).这个工作得到了一个IProgressMonitor,我用它来报告进度,这一切都很好.

这是我的问题:在处理过程中,我有时会发现有比我预期更多的工作.有时甚至加倍.但是,一旦我在进度监视器中设置了总滴答数,就无法更改此值.

关于如何克服这个问题的任何想法?

Rob*_*anu 5

看看SubMonitor.

   void doSomething(IProgressMonitor monitor) {
      // Convert the given monitor into a progress instance 
      SubMonitor progress = SubMonitor.convert(monitor, 100);

      // Use 30% of the progress to do some work
      doSomeWork(progress.newChild(30));

      // Advance the monitor by another 30%
      progress.worked(30);

      // Use the remaining 40% of the progress to do some more work
      doSomeWork(progress.newChild(40)); 
  }
Run Code Online (Sandbox Code Playgroud)

除了技术细节之外,我就是这样做的:

  • 你平常的工作是100;
  • 设定初始工作200;
  • 当你进步时,根据需要增加工作量,假设要做的总工作量是100;
  • 工作完成后,表示完成工作.

这具有以下效果:

  • 对于需要100个单位的常规工作项目,在50%的进度后最终完成得非常快;
  • 在一个长期的工作项目上,它最终会有一个很好的稳步进展.

这比通过比用户期望的更快完成更好,并且看起来不会长时间卡住.

对于奖励积分,如果/当检测到潜在的长子任务足够快时,仍然会增加大量的进度.这避免了从50%跳到完成.