c# - 进度条不工作

标签 c# winforms backgroundworker

我正在尝试在一个 4 步过程中使用 4 个进度条。基本上使用进度条是因为项目需要很长时间才能运行,使用通常使用的带有(除以十)的单个进度条意味着进度条每 20 分钟会获得 1 个条子。 (太长了。)

代码如下:

backgroundWorker1.ReportProgress(a++);

if (a == 100)
{
    backgroundWorker2.ReportProgress(b++);
    a = 0;
}

if (b == 100)
{
    backgroundWorker3.ReportProgress(c++);
    b = 0;
}

if (c == 100)
{
    c = 0;
    d = 25;
}

backgroundWorker4.ReportProgress(d);

问题是,第一个进度条达到大约 99% 并停止,第二个进度条根本没有移动,但进程仍在运行。

最佳答案

尝试在传递给方法之前进行参数递增。在 C# 中 increment operator可以出现在其操作数之前和之后。当您执行 (a++) 时,它是后缀增量操作。此操作的结果是 递增之前的值。因此,传递给 ReportProgess 的最大值将是 99 而不是 100。如果将增量操作更改为 (++a),即前缀增量,则操作结果将是 之后的值 增量:

backgroundWorker1.ReportProgress(++a);

与其他调用相同。顺便说一句,上次报告很奇怪 - d 的值只改变了一次。也许您应该改用 d += 25

关于c# - 进度条不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12984223/

相关文章:

C# - 如何使用自定义代码与后台 worker 一起工作 - 运行、暂停、停止?

vb.net - 自动滚动到由 backgroundworker 更新的多行文本框的底部

c# - 如何绑定(bind)到 Win RT 中当前上下文之外的属性?

c# - 在没有 Task.Wait() 的情况下使用 cancellationToken

c# - DataGridView 设置行高不起作用

C# 正则表达式匹配数组

c# - 如何使用MVVM/ICommand模式在WPF中正确实现BackgroundWorker

c# - 取回表中的行数返回 -1

c# - 套接字通信程序测试

c# - 我们可以设置面板背景图像的不透明度吗?