2012-07-31 83 views
2

我的程序从文件系统的目录中读取文件。我有一个进度条,其最小值设置为0,最大值设置为n(特定目录中文件的数量)。它上面是一段文字,显示迭代的进度... 1/100,2/100,3/100等。如何将进度条与数据同步?

我遇到的问题是显示的文本永远不会与进度条。当文本显示100/100时,进度条将在70%左右。任何人都可以帮助我吗?

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

尝试在你的线程使用“反”就像

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++; 
     } 
    } 
}); 
+0

它仍然不能正常工作。是否有一个原因,当进度条初始设定为50%时,仍然需要一秒钟才能显示该点到那一点?我认为这可能只是这个动画的滞后导致我的问题。 – Jackson 2012-08-01 09:38:32

+1

尝试'syncExec'而不是'asyncExec',asyncExec不会等待UI'更新',因为syncExec会 – 2012-08-01 13:12:30