2012-02-10 29 views
2

我需要Windows窗体应用程序的进度条,但我的过程不是长度特定的,所以我不能将最大值添加到进度条。如何在非长度特定任务或并行循环中使用进度条?

我必须用LongProcess类Run方法运行时间增加进度条值。

void start_click() 
{ 
    button1.Enabled=false; 

    Task.Factory.StartNew(()=>{ 
     Parallel.Foreach(files,f=>{ 
      LongProcess process =new LongProcess(); // Long-running process (is not my control) 
      process.Run(f); 
        //progressBarValueIncrement(); 

     }); 
    }).ContinueWith(t=>{ 
     // completed 
     BeginInvoke(new Action(() => button1.Enabled=true)); 
    }); 
} 

我该如何执行此操作?

+2

您可以使用循环进度条,这说明只是一些正在进行中,你也可以近似您的应用程序运行时间,并在最后一步停止,然后在完成进度时停止它。 – 2012-02-10 13:07:02

+1

也许我在这里错过了一些东西,但是如果您知道使用foreach迭代的文件数量,这不是每次完成一次的计数增加1 /计数? – 2012-02-10 13:34:59

+0

@MarkSmith而过程 – oguzh4n 2012-02-10 13:40:08

回答

2

,你可以增加用剩下的未填充值的一定百分比的进度条。这意味着进度条从来没有被填满,并且会越来越慢地变得越来越饱满。

因此,在第一个增量中填充进度条50%,然后下一个增量填充其余部分的50%,因此25%总共75%,然后50%剩余25%,总计87.5%等等

您可能希望让你使用%年龄的基础上的进度条有多满是舞台,所以在一开始用5%开始,因此不会在一开始填满过快,然后移动到较高的百分比,所以你看到了吧还在动接近尾声...

如果你不知道的东西多长时间是要采取虽然是一个进度条合适?也许你会的东西,表现出进展正在发生的事情,但没多少已经完成......

+1

我也会质疑在这种情况下进度条UI模式的适用性。 – 2012-02-10 13:09:56