0

我正在尝试通过更改 totalWork 创建 ProgressMonitor。让我们假设我有 2 个步骤。第一步是检索对象列表。总工作量=-1(未知)。

在第二步中,我更改了 lisl 中的每个对象。所以我想将 totalWork 更改为列表的大小。我已经尝试过类似下面的代码,但它没有工作:

int totalWork = -1
monitor.beginTask("Task", totalWork);
monitor.subTask("Start Subtask 1");
final List<Object> list = retrieveList();
totalWork = list.size();
monitor.subTask("Retrieve Events");
for(Object obj:list){
   //do some job
   monitor.worked(1)
}
monitor.done()

有没有办法做到这一点?

编辑:我正在扩展 Job 并且上面的代码在 run 方法中。

4

2 回答 2

1

我找到了解决我的问题的方法。

int totalWork = -1
monitor.beginTask("Task 1", totalWork);
monitor.subTask("Start Subtask 1");
final List<Object> list = retrieveList();
totalWork = list.size();
monitor.beginTask("Retrieve Events",totalWork);
for(Object obj:list){
   //do some job
   monitor.worked(1)
}
monitor.done()
于 2012-06-12T08:21:08.770 回答
0

简短的回答:不!

更长的答案:

如果第一步花费的时间少于 100 毫秒(即使对于非常大的数据集),那么通常在beginTask...

在许多情况下,初始计数操作所花费的时间与实际操作非常相似。在这种情况下,您可以使用嵌入式SubProgressMonitor. 假设初始计数占后面操作的 1/20:

public void run(IProgressMonitor monitor) {
    monitor.beginTask("Task", 1+20);
    try {
        monitor.subTask("Initializing");
        final List<Object> list = retrieveList();
        monitor.worked(1);

        IProgressMonitor sub = new SubProgressMonitor(monitor, 20);
        sub.beginTask("", list.size());
        for (Object o : list) {
            sub.subTask(""+o);
            // ...
            sub.worked(1);
        }
        sub.done();
    } finally {
        monitor.done();
    }
}
于 2012-06-12T06:05:02.177 回答