首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Eclipse RCP中实现ProgressMonitorDialog的最佳实践

在Eclipse RCP中实现ProgressMonitorDialog的最佳实践
EN

Stack Overflow用户
提问于 2011-08-26 21:37:25
回答 1查看 1.4K关注 0票数 1

我希望在UI中显示一个长时间运行的操作(进程)的进度,这样用户就可以了解后台作业的状态。这就是我实现的方式,我觉得代码很荒谬。下面是我的代码

代码语言:javascript
运行
复制
dialog.run(true,false, new IRunnableWithProgress() {
    @Override
    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
        monitor.beginTask("Main process", 10);
        for (int i = 0; i < 10; i++) {
            if (monitor.isCanceled()) return;
            monitor.subTask("Status  message");
            sleep(1000);
            // worked increases the monitor, the values are added to the existing ones
            monitor.worked(1);
            if(i == 3) {
                sleep(3000);
                callMe();//calling a long running function 
            }
            if(i == 9) {
                monitor.subTask("finishing setup..... please wait ");
                sleep(2000);
            }
        }
        monitor.done();
    }
});

注意:在代码中的某个地方有一个睡眠方法

i == 3中,调用一个操作/函数至少需要5分钟,在函数执行后,进程将继续。

我不希望在执行函数(长时间运行的操作)时进程停止,而是即使在执行函数时也必须显示进程。

有人能在显示进度时展示正确的编程实践吗?

EN

Stack Overflow用户

发布于 2014-02-12 15:20:34

您的代码感觉很荒谬的原因是,将长时间运行的方法包装在IRunnableWithProgress.run()中并不会增加太多内容,也没有什么神奇之处。

要让ProgressMonitorDialog (或相关的Job API)为您工作,您需要更改"callMe()“,以便它接受"IProgressMonitor ProgressMonitorDialog”作为参数,并使用该参数来侦听取消请求,并使用它来报告进度。

再说一遍,使用不同的措辞:您需要递归地将"IProgressMonitor监视器“作为参数添加到所有长时间运行的方法调用中。如果要报告任何进度和/或您希望它是可取消的,所有长时间运行的操作都必须考虑到这一点(IProgressMonitor)。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7205479

复制
相关文章

相似问题

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