Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';这是进度条滞后的原因。。而另一个progressbar工作正常(它们都有相同的代码)?_C#_Winforms_Progress Bar_Lag - Fatal编程技术网

C# 什么';这是进度条滞后的原因。。而另一个progressbar工作正常(它们都有相同的代码)?

C# 什么';这是进度条滞后的原因。。而另一个progressbar工作正常(它们都有相同的代码)?,c#,winforms,progress-bar,lag,C#,Winforms,Progress Bar,Lag,我有两个进度条。。它们都有相同的属性 当我开始(发送…)时,其中一个延迟了一秒,然后继续像45%然后53%。。但另一个是。。工作正常,无滞后现象 为什么会发生这样的事。。有什么解释吗。我还试图删除滞后的pBar,并复制过去的工作pBar。。但还是一样 代码如下: private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { ProgressBarAll

我有两个进度条。。它们都有相同的属性

当我开始(发送…)时,其中一个延迟了一秒,然后继续像45%然后53%。。但另一个是。。工作正常,无滞后现象

为什么会发生这样的事。。有什么解释吗。我还试图删除滞后的pBar,并复制过去的工作pBar。。但还是一样

代码如下:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        ProgressBarAll.Position = (int)((sumAll * 100) / sizeAll);
        ProgressBarAll.Text = ProgressBarAll.Position.ToString() + "%";
        progressBarFile.Position = (int)((sumAll * 100) / sizeAll);
        progressBarFile.Text = progressBarFile.Position.ToString() + "%";
    }

这真让我心烦。。我很困惑,因为他们有相同的代码


那么我该如何解决这个问题呢。。提前感谢。

很有可能
sumAll
会在设置
ProgressBarAll
progressBarFile
之间更改其值。这是因为您不正确地使用了
ProgressChanged

你需要的是这样的东西:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBarAll.Position = e.ProgressPercentage;
    progressBarAll.Text = e.ProgressPercentage.ToString() + "%";
    progressBarFile.Position = e.ProgressPercentage;
    progressBarFile.Text = e.ProgressPercentage.ToString() + "%";
}
backgroundWorker1.ReportProgress(progressPercentage);
然后在
DoWork
处理程序中调用
ReportProgress
,如下所示:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBarAll.Position = e.ProgressPercentage;
    progressBarAll.Text = e.ProgressPercentage.ToString() + "%";
    progressBarFile.Position = e.ProgressPercentage;
    progressBarFile.Text = e.ProgressPercentage.ToString() + "%";
}
backgroundWorker1.ReportProgress(progressPercentage);

这里的问题不在于进度条,而在于进度条跟踪的处理/命令吗?我注意到你的一个进度条叫做文件进度;系统I/O和磁盘读/写可能无法在线性时间内报告,或者根本无法顺利报告


问题是,如果它偶尔在磁盘i/o中暂停并“滞后”,它真的错了吗?

我已经这样做了。。同样的结果。。他们中的一个仍然落后一秒钟才赶上另一个。。我想这可能是个绘图问题。现在我重新编辑了它,使它和你的代码一样。。还是一样。。特别是当我最大化表单的大小时,延迟变得明显。。两个pbar之间的延迟大约是第二次尝试在
progressBarFile.Text=…
行上设置断点。当您点击断点T时,progressbar的两个位置都已设置。检查以确保它们相等。如果是的话,那可能是图纸问题。我不明白你的意思?系统I/O是什么??正如你看到的,它们都有相同的代码。啊,对。没有完全正确地阅读您的问题…并且您确定sizeall的值在sumall和sizeall分配之间没有变化?sizeall是文件的大小,sum是sizeall的发送字节。。西泽尔没有改变。。这两个控件的值都相同。是否对进度条使用
自定义控件
。。它的xpProgressbar库。我从codeproject网站下载了它codeproject中有一个部分,如果您在一个紧循环或CPU密集型环境中更新位置,则有可能不会重新绘制,您需要执行
Application.DoEvent()
。如何使用Application.DoEvent()修复它。。你能发布一个答案吗!我没有自定义控件代码的可见性,但我认为这是一个重绘问题。重写onPaint方法以实现类似e.graphics.clear(this.backColor)的功能以使绘图无效,或者…在ReportProgress事件中添加“Application.DoEvent()”(不保证)