我使用ProgressBar
来监视DataGridView
的人口数据,数据从数据库中检索,并在其左侧放置一个Label
。WinForms根据其属性不绘制ProgressBar
这没有什么奇特的。数据检索发生在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毫秒。有没有比这更好的方法?
[看这里](https://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired(v = vs.110).aspx) – TaW