VB.NET进度条

Ale*_*lex 7 vb.net for-loop progress-bar

可能重复:
.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
Run Code Online (Sandbox Code Playgroud)

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

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

For i As Integer = 0 To 5000 - 1
      pb.IncProg()
Next
Run Code Online (Sandbox Code Playgroud)

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

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

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

Neo*_*isk 13

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

progressBar.Value += 2
progressBar.Value -= 1
Run Code Online (Sandbox Code Playgroud)

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