我必须在我的VB.NET程序中使用进度条,它的行为与VB6中的进度条非常不同。例如,如果我有一个过程,通过一些循环填充一个datagridview,并用progressbar显示进度,会发生什么?
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这段代码创建了几个控件,加载了一个窗体,并启动了一个循环来填充数据,并在进度条中显示进度。在此之后,程序隐藏了一个进度条,并显示了一个数据行视图,这是具体(真实世界)程序中的常见情况。
问题是,尽管两者都有,数据网格视图填充和更新进度条都是从同一个循环(以100步为单位)结束的,填充数据网格视图的速度比进度条显示进度的速度快得多,并将其隐藏在大约50%的位置。
这与VB6有很大的不同,在那里填充和显示是完全汉化的,网格将在进度条达到100%的值后显示。
如何在显示的代码上获得VB.NET中进度条的这些功能?
我尝试刷新进度条和DoEvents,但这还不足以让它像预期的那样工作。
发布于 2013-01-29 18:13:15
为了解决这个问题,而不是仅仅从一个ProgressBar做一个“线程科幻小说”,你必须使用一种技术,这通常是微软的图形用户界面工具包。
这样的方法可能会解决您的具体问题:
If t Mod 100 = 0 Then
pb.Value = t
If pb.Value > 0 Then pb.Value -= 1
temp += 1
dgv.Rows.Add(New String() { _
t.ToString, _
temp.ToString _
})
End Ifhttps://stackoverflow.com/questions/14578123
复制相似问题