C# 如何在非长度特定任务或并行循环中使用进度条?
我需要windows窗体应用程序中的进度条,但我的进程不是特定于长度的,因此我无法将最大值设置为进度条 我必须使用LongProcess类运行方法运行时间来增加进度条值C# 如何在非长度特定任务或并行循环中使用进度条?,c#,progress-bar,task,C#,Progress Bar,Task,我需要windows窗体应用程序中的进度条,但我的进程不是特定于长度的,因此我无法将最大值设置为进度条 我必须使用LongProcess类运行方法运行时间来增加进度条值 void start_click() { button1.Enabled=false; Task.Factory.StartNew(()=>{ Parallel.Foreach(files,f=>{ LongProcess process =new LongP
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));
});
}
如何实现这一点?您可以使用剩余未填充值的某个百分比来增加进度条。这意味着进度条从未填满,而且会越来越慢地填满 因此,在第一个增量中,您将填充进度条的50%,然后在下一个增量中,您将填充剩余进度条的50%,因此,总进度条的75%将填充25%,剩余进度条的50%,总进度条的87.5%,以此类推 您可能希望将其分段,以便您使用的%年龄是基于进度条的填满程度,因此从开始时的5%开始,这样它不会在开始时填满得太快,然后移动到更高的百分比,这样您可以看到进度条仍在接近结束时移动
如果你不知道某件事需要多长时间,进度条是否合适?也许你会更喜欢显示正在发生的事情,但不是完成了多少…你可以使用循环进度条,它只显示正在进行的事情,你也可以估计你的应用程序运行时间,并在最后一步停止,然后在进度完成后停止。也许我这里遗漏了一些东西,但是如果你知道使用foreach迭代的文件数,这不是每次完成都会增加1/计数的小增量吗?@MarkSmith我应该在运行LongProcess时增加进度值,而不是在进程之后如果你有大量文件,为什么不在每次文件完成时更新栏?我认为,对于进度条来说,任何超过25个文件的粒度都足够了。在这种情况下,每1%而不是每4%更新一次是否真的那么重要?除非所有25个都同时运行,但这不太可能。我还怀疑进度条UI模式在这种情况下是否合适。