Vb.net 进度条不更新
我需要在加载表单时有一个进度条;我找到了这个代码,但它不起作用;因为进度条不会更新。有人设法解决了这个问题?谢谢Vb.net 进度条不更新,vb.net,Vb.net,我需要在加载表单时有一个进度条;我找到了这个代码,但它不起作用;因为进度条不会更新。有人设法解决了这个问题?谢谢 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork For i = 0 To 100 BackgroundWorker1.R
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For i = 0 To 100
BackgroundWorker1.ReportProgress(i)
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
ProgressBar1.Refresh()
End Sub
Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click
BackgroundWorker1.RunWorkerAsync()
Dim form2 As New frm2 ()
form2.Show()
End Sub
尝试将Application.DoEvents添加到循环:
For i = 0 To 100
BackgroundWorker1.ReportProgress(i)
Application.DoEvents
next i
你确定它不起作用吗?因为在发布时,它会在一瞬间将您的进度从0更新到100。可能没有足够的时间闪烁一次。你的进度条是1,太快了,2,似乎与加载表单无关。我如何减慢进度条并使加载表单2可见?因为你正在另一个线程中处理,请使用该方法引入延迟。尽管这样做只是随意的,实际上并没有引用任何类型的Progressbar1.Update而不是Refresh。这将使其无效,并将调用draw。还要检查ReporteProgress是否正确,以及backgroundworker的速度是否不像之前所说的那样快。即使这样做会奏效,我也不会建议任何人使用DoEvents,除非在非常罕见的情况下。我过去曾多次被它咬过。我知道有人猜测DoEvents的用途。我在这种情况下使用过它,它在没有引入任何新线程的情况下解决了问题。因为它在单独的线程中运行,所以我只使用Sleep。没有你的行李,我听到了。我刚刚重新编写了一个程序,该程序使用显示的进度条控件更新数据。我将它设置为在一个单独的线程上运行,添加了一些代理,从循环中删除了DoEvents,它工作得很好。如果没有线程,没有DoEvents,进度条控件就不会更新。在VB6中,似乎广泛鼓励使用DoEvents。我怀疑DoEvents的行为在VB6和VB.NET之间发生了变化。它的使用不再受到鼓励,因为框架内还有其他更好的方法来实现相同的目的,而不必承担它可能带来的负担。