2

我有 2 种方法包含 selft 作业,例如

protected void method1(){
 String name=getName();//return name based on combobox selection
 Job job= new Job("first job"){
            @Override
            protected IStatus run(IProgressMonitor monitor) {
            someActions();
      }
   }
}

protected void method2(){
 String name=getName();//return name based on combobox selection
 Job job= new Job("second job"){
            @Override
            protected IStatus run(IProgressMonitor monitor) {
            someActions();
      }
   }
}

method1和method2可以分开调用,自带进度条

我还有一些按钮可以调用这两种方法

 btnUpdate.addListener(SWT.MouseUp, new Listener() {

            @Override
            public void handleEvent(Event event) {
                         method1();
                         method2();
                    }
     }

但是这个构造不正确,因为来自 method2() 的作业开始执行较早,然后来自 method1() 的作业完成。此外,如果我将来自 method1() 的作业标记为加入,则在 method1() 执行之前,method2() 将不会启动,但不会显示进度条

如何使其正常工作?)

4

1 回答 1

2

通过设置作业规则防止 2 个作业同时运行:

public class Mutex implements ISchedulingRule {

        public boolean contains(ISchedulingRule rule) {
            return (rule == this);
        }

        public boolean isConflicting(ISchedulingRule rule) {
            return (rule == this);
        }

}// Mutex

public static final ISchedulingRule mutex = new Mutex();

对于你的两个工作:

job.setRule(<your mutex instance>);

确保两个作业使用相同的互斥体实例!

这应该:

  1. 防止 2 个作业同时运行(如果它们都使用相同的规则)
  2. 按照您安排它们的顺序执行它们

顺便说一句:您没有使用 来安排您的工作job.schedule(),因此实际上它们甚至不应该使用您发布的代码来执行...

于 2012-02-02T09:57:03.010 回答