首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建动态变化的ProgressMonitor

创建动态变化的ProgressMonitor
EN

Stack Overflow用户
提问于 2012-06-11 12:36:47
回答 2查看 712关注 0票数 0

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

在第二步中,我将更改lisl中的每个对象。因此,我想将totalWork更改为列表的大小。我尝试过类似下面的代码,但没有成功:

代码语言:javascript
复制
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方法中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-12 06:05:02

简短回答:不!

较长的答覆:

如果第一步花费的时间少于100 is (即使对于非常大的数据集),那么这通常是在beginTask之前完成的。

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

代码语言:javascript
复制
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();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-06-12 08:21:08

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

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10980243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档