【发布时间】:2017-07-03 12:55:33
【问题描述】:
我正在使用ProgressBar 来监控DataGridView 的人口,其中的数据从数据库中检索,并在其左侧放置了Label。
这没什么特别的。数据检索发生在BackgroundWorker 的DoWork 处理程序中,此时ProgressBar 采用选取框样式,而Label 显示通用“正在加载...”。加载完成后,BackgroundWorker 的ProgressChanged 处理程序将行一一添加到DataGridView,而ProgressBar 和Label 显示进度。我为此使用的代码如下:
*code that adds row*
if (e.ProgressPercentage > 0)
pbrProgress.Value = e.ProgressPercentage - 1;
pbrProgress.Value = e.ProgressPercentage;
lblProgress.Text = e.ProgressPercentage + "/" + pbrProgress.Maximum;
Label 总是正确显示,通过调试我发现ProgressBar 也有正确的Value 和Maximum 属性。但是,ProgressBar 实际上直到达到第 10 个结果左右才开始显示进度(绿色填充)。当最后一个结果被添加到DataGridView 时,它也远未满。
我尝试在代码末尾添加pbrProgress.Refresh();,并使用自定义ProgressBar 并将DoubleBuffered 属性设置为true,但无济于事。
真的,我发现的唯一解决方案是在每次调用 ReportProgress 后让线程休眠 80 毫秒。还有比这更好的方法吗?
【问题讨论】:
标签: c# winforms progress-bar