如何将进度条与数据同步?

3
我的程序从文件系统的目录中读取文件。我有一个进度条,最小值设置为0,最大值设置为n(特定目录中文件的数量)。在进度条上方有一段文本,显示迭代的进度... 1/100、2/100、3/100 等等。
我的问题是显示的文本与进度条永远不同步。当进度条显示约70%时,文本却说100/100。有人能帮我解决这个问题吗?
pb1.setMinimum(0);
pb1.setMaximum(files2.size());

shell.getDisplay().asyncExec(new Runnable() {
    public void run() {
        if (pb1.isDisposed()) return;
        for(final File f : files2) {
            pb1.setSelection(pb1.getSelection() + 1);
            dialogShell.setText("Loading" + pb1.getSelection() +
                "/"+pb1.getMaximum());

        }
    }
});
1个回答

1

尝试在您的线程中使用“计数器”

pb1.setMinimum(0);
pb1.setMaximum(files2.size());

shell.getDisplay().asyncExec(new Runnable() {
    public void run() {
        int n = pb1.getMinimum();
        int d = pb1.getMaximum();

        if (pb1.isDisposed()) { return; }

        for(final File f:files2){
            pb1.setSelection(n);
            dialogShell.setText("Loading "+n+"/"+d);
            n++;
        }
    }
});

它仍然不能正常工作。为什么进度条在最初设置为50%时,仍需要一秒钟才能将该点显示出来?我认为这可能只是动画延迟导致了我的问题。 - Jackson
1
尝试使用syncExec而不是asyncExecasyncExec不会等待UI“更新”,而syncExec会。 - T I

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接