我必须在我的 VB.NET 程序中使用进度条,它的行为与 VB6 中的非常不同。例如,如果我有一个程序通过某个循环填充 datagridview 并使用进度条显示进度,会发生什么?
Datagridview 填充 100% 而进度条达到 50% 左右!
这是说明问题的示例程序。创建一个新项目,添加一个 windows 窗体,然后将此代码复制到 Form1 的代码上。
Public Class Form1
Dim myMax As Integer = 100000
Dim pb As New ProgressBar
Dim dgv As New DataGridView
Dim WithEvents ti As New Timer
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With Me
.Width = 400
.Height = 250
.Controls.Add(pb)
With pb
.Maximum = myMax
.Dock = DockStyle.Bottom
End With
.Controls.Add(dgv)
With dgv
.ColumnCount = 2
.Dock = DockStyle.Fill
.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
.Visible = False
End With
End With
ti.Start()
End Sub
Private Sub OnFormLoaded(ByVal sender As Object, ByVal e As EventArgs) Handles ti.Tick
ti.Enabled = False
ti.Dispose()
Dim temp As Integer
For t = 0 To myMax
If t Mod 100 = 0 Then
pb.Value = t
pb.Refresh()
Application.DoEvents()
temp += 1
dgv.Rows.Add(New String() { _
t.ToString, _
temp.ToString _
})
End If
Next
pb.Value = myMax
pb.Visible = False
dgv.Visible = True
dgv.Focus()
End Sub
End Class
这段代码创建了几个控件,加载了一个表单并启动了一个循环来填充数据并在进度条中显示该进度。在该程序隐藏一个进度条并显示一个数据网格视图之后,具体(现实世界)程序中的常见情况是什么。
问题是,尽管 datagridview 填充和更新进度条都来自同一个循环(以 100 步为单位),但 datagridview 的填充比进度条显示进度快得多,并将其隐藏在 50% 左右。
这与 VB6 完全不同,VB6 的填充和显示是完全同步的,并且在进度条达到 100% 值后将显示网格。
如何在显示的代码上获得 VB.NET 中进度条的这种功能?
我尝试刷新进度条和 DoEvents 但这还不足以让它按预期工作。