这个问题在这里已经有了答案:
8年前关闭。
Possible Duplicate:
.NET progressbar not updating
我构建了一个进度条类,用于显示我的 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() 但它大大减慢了进度 - 并且仍然给我相同的结果。
有没有其他方法可以实现更好的视觉吸引力的进度条?
最佳答案
在 Windows 7 上看到这种效果是正常的。问题是当你将一个值设置为 X 时,它会在接下来的 0.5-1 秒内滑动到这个位置。因此,如果您的操作发生得很快,您只会在 50-80% 时看到它。解决方案是先设置一个更高的值,然后再减少到你想要的值。像这样的东西:
progressBar.Value += 2
progressBar.Value -= 1
并且不要忘记临时增加最大值,否则您可能会遇到异常,例如,当从 4999 增加到 5000 时(您不能设置为 5001)。
关于VB.NET 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14217894/