每次工作后更新 IStatusLineManager 中的 IProgressMonitor()
Update IProgressMonitor in IStatusLineManager after each worked()
我正在尝试使用 IProgressMonitor,但是当我 运行 我的代码时,我没有看到任何事情发生。如果我消除 pm.done();我可以看到进度监视器填满然后停留在那里。有没有一种方法可以在每次 pm.worked() 调用后刷新 UI,即使我必须暂停当前线程。
public void someMethod(CutomerInfo cInfo) {
IStatusLineManager lm = getViewSite().getActionBars().getStatusLineManager();
IProgressMonitor pm = lm.getProgressMonitor();
pm.beginTask("Doing some work", 100);
populateCustomerInfo();
pm.worked(25);
someOtherFunction();
pm.worked(25);
morefunctions();
pm.worked(25);
this.someValue = someClass.yetAnotherFunction(this.cInfo, this);
pm.worked(25);
pm.done();
}
编辑 1
我将 Job 添加到我的函数中,现在看起来像下面的代码。我知道作业是 运行ning,但我没有看到进度条。有没有办法通过我定义为 pm?
的进度监视器
public void someMethod(CutomerInfo cInfo) {
Job job = new Job("Test Job") {
IStatusLineManager lm = getViewSite().getActionBars().getStatusLineManager();
IProgressMonitor pm = lm.getProgressMonitor();
@Override
protected IStatus run(IProgressMonitor monitor) {
// Set total number of work units
monitor.beginTask("start task", 100);
try {
System.out.println("\nHello World (from a background job)\n");
monitor.subTask("doing a");
populateCustomerInfo();
monitor.worked(25);
monitor.subTask("doing b");
someOtherFunction();
monitor.worked(25);
monitor.subTask("doing c");
morefunctions();
monitor.worked(25);
monitor.subTask("doing d");
yetAnotherFunction();
monitor.worked(25);
monitor.done();
}catch (InterruptedException e1) {
e1.printStackTrace();
}
return Status.OK_STATUS;
}
};
job.schedule();
}
长 运行ning 任务必须 运行 在后台线程中。 运行 UI 线程中的它们将阻止 UI 更新。
在这种情况下,您可能希望使用 Eclipse Job
。 Job 的主要 run
方法有一个进度监视器,它将显示在状态行中。
我正在尝试使用 IProgressMonitor,但是当我 运行 我的代码时,我没有看到任何事情发生。如果我消除 pm.done();我可以看到进度监视器填满然后停留在那里。有没有一种方法可以在每次 pm.worked() 调用后刷新 UI,即使我必须暂停当前线程。
public void someMethod(CutomerInfo cInfo) {
IStatusLineManager lm = getViewSite().getActionBars().getStatusLineManager();
IProgressMonitor pm = lm.getProgressMonitor();
pm.beginTask("Doing some work", 100);
populateCustomerInfo();
pm.worked(25);
someOtherFunction();
pm.worked(25);
morefunctions();
pm.worked(25);
this.someValue = someClass.yetAnotherFunction(this.cInfo, this);
pm.worked(25);
pm.done();
}
编辑 1
我将 Job 添加到我的函数中,现在看起来像下面的代码。我知道作业是 运行ning,但我没有看到进度条。有没有办法通过我定义为 pm?
的进度监视器public void someMethod(CutomerInfo cInfo) {
Job job = new Job("Test Job") {
IStatusLineManager lm = getViewSite().getActionBars().getStatusLineManager();
IProgressMonitor pm = lm.getProgressMonitor();
@Override
protected IStatus run(IProgressMonitor monitor) {
// Set total number of work units
monitor.beginTask("start task", 100);
try {
System.out.println("\nHello World (from a background job)\n");
monitor.subTask("doing a");
populateCustomerInfo();
monitor.worked(25);
monitor.subTask("doing b");
someOtherFunction();
monitor.worked(25);
monitor.subTask("doing c");
morefunctions();
monitor.worked(25);
monitor.subTask("doing d");
yetAnotherFunction();
monitor.worked(25);
monitor.done();
}catch (InterruptedException e1) {
e1.printStackTrace();
}
return Status.OK_STATUS;
}
};
job.schedule();
}
长 运行ning 任务必须 运行 在后台线程中。 运行 UI 线程中的它们将阻止 UI 更新。
在这种情况下,您可能希望使用 Eclipse Job
。 Job 的主要 run
方法有一个进度监视器,它将显示在状态行中。