c# - 如何在非长度特定任务或并行循环中使用进度条?

标签 c# progress-bar task

我需要在 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));
    });
}

我该如何实现这个?

最佳答案

您可以使用剩余未填充值的一定百分比来增加进度条。这意味着进度条永远不会填满,并且会越来越慢地填满。

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

您可能想要对其进行分段,以便您使用的 %age 基于进度条的满度,因此从 5% 开始,这样它就不会在开始时填得太快,然后移动到更高的百分比,因此您可以看到条形仍在接近结束时移动...

如果您不知道某件事需要多长时间,进度条是否合适?也许你会更好地做一些表明正在发生进展的事情,但不是已经完成了多少......

关于c# - 如何在非长度特定任务或并行循环中使用进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228233/

相关文章:

c# - (如何)使用 NSMenuItem 将文本从 <editor> 复制到剪贴板

c# - 构建可以覆盖主机文件的 HTTPPing

c# - 如何在 Aero/.NET 4 中获取 block 样式进度条

ios - 使用 SDWebImage block 的 ImageView 上的圆形进度条

msbuild - AfterPublish目标不起作用

c++ - 多线程引擎窗口随机减速

c# - 从磁盘号检索虚拟磁盘文件名

c# - 使用 C# 和 Microsoft Graph SDK 从日历获取事件

javascript - jQuery:在加载 html 页面时同步更新进度条?

c# - 窗口关闭事件中的 Threading.task 和 Dispatcher.Invoke 方法