进度条未显示填充(vb.net/Visual Studio)

时间:2014-04-29 17:48:45

标签: vb.net visual-studio-2013

我有一个代码设置,可以循环并执行一些网络固件功能。对于用户,我有一个弹出的进度条表单,并在发生时向他们显示状态。代码很简单:

 ProgressBar.Show()

 For j As Integer = 0 To datagridview.Rows.Count - 1

 'do network functions

 ProgressBar.ProgressBar1.Increment(100 / (datagridview.Rows.Count))

 next

 ProgressBar.Close()

ProgressBar是表单的名称,上面有进度条。这是一个非常简单的形式。 因此,如果我在"为"设置一个断点。线,即j = 0,我的进度条看起来像这样: enter image description here

嗯,这没有给出任何信息。如果我走到下面的增量线的点,它显示! enter image description here

我认为如果我之前添加一些进度条增量,则该条将填充。所以我试过了。所以我将其改为:

 ProgressBar.Show()

 ProgressBar.ProgressBar1.Increment(100 / (datagridview.Rows.Count+1))

 For j As Integer = 0 To datagridview.Rows.Count - 1

 'do network functions

 ProgressBar.ProgressBar1.Increment(100 / (datagridview.Rows.Count+1))

 next


ProgressBar.Close()

然而,如果我在断点处停在for循环中,我仍然会有一个白色条而不是绿色条。我究竟做错了什么?我觉得这是简单/ noob级别的东西。赞赏。

1 个答案:

答案 0 :(得分:2)

@Hans Passant的评论是正确的。您的UI线程卡住了。它正在等待你的后台线程(即你的循环代码)在重新绘制屏幕之前完成 当我使用进度条时,我在循环中调用DoEvents(),如下所示:

ProgressBar.Show()

ProgressBar.ProgressBar1.Increment(100 / (datagridview.Rows.Count+1))

For j As Integer = 0 To datagridview.Rows.Count - 1
   'do network functions
   ProgressBar.ProgressBar1.Increment(100 / (datagridview.Rows.Count+1))
   'force .NET to update the forground thread, so the progress bar looks like it should
   Application.DoEvents()
Next

ProgressBar.Close()

对DoEvents的调用,基本上会暂停后台执行,直到UI有时间更新,然后继续后台执行。