我正在尝试通过更改ProgressMonitor来创建totalWork。假设我有两个步骤。第一步是检索对象列表。总功=-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()有办法做到这一点吗?
编辑:,我在扩展作业,上面的代码在run方法中。
发布于 2012-06-12 06:05:02
简短回答:不!
较长的答覆:
如果第一步花费的时间少于100 is (即使对于非常大的数据集),那么这通常是在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-12 08:21:08
我找到了解决问题的办法。
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()https://stackoverflow.com/questions/10980243
复制相似问题