7

可能重复:
.NET 进度条未更新

我建立了一个进度条类,显示我的 for 循环中的进度。这是进度条类的代码:

Public Class frmProgress
Private Sub frmProgress_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    progressBar.Minimum = 0
End Sub

Public Sub ProgressBarSetup(ByRef Maximum As Integer, ByRef Title As String)
    progressBar.Maximum = Maximum
    progressBar.Value = 0
    Me.Text = Title
    Me.Show()
End Sub

Public Sub IncProg()
    progressBar.Value += 1
    Application.DoEvents()

    If progressBar.Value = progressBar.Maximum Then
        Me.Close()
    End If
End Sub
End Class

这是我在 for 循环中使用它的方法:

Dim pb As New ProgressBar
pb.ProgressBarSetup(5000, "Test")

For i As Integer = 0 To 5000 - 1
      pb.IncProg()
Next

问题是视觉问题。它完成了完整进度条的 70-85%,然后关闭。关闭时,进度条值和最大值相等,但进度条仅填充到其长度的四分之三左右。

我尝试使用 progressBar.Refresh() 而不是 Application.DoEvents() 但它大大减慢了进度 - 仍然给我相同的结果。

有没有其他方法可以实现更好的视觉吸引力进度条?

4

1 回答 1

14

在 Windows 7 上看到这种效果是正常的。问题是当您将值设置为 X 时,它会在接下来的 0.5-1 秒内滑动到该位置。因此,如果您的动作发生得很快,您只会看到它在 50-80% 的情况下完成。解决方案是首先设置为更高的值,然后减少到您想要的值。像这样的东西:

progressBar.Value += 2
progressBar.Value -= 1

并且不要忘记临时增加最大值,否则您可能会遇到异常,例如,当从 4999 增加到 5000 时(您不能设置为 5001)。

于 2013-01-08T15:07:47.593 回答