2014-05-03 127 views
0

我在加载表单时需要一个进度条;我发现这个代码,但它不起作用;因为进度条不会更新。有人设法解决这个问题?感谢进度条不更新

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 
+0

你确定它不工作?因为发布时,它应该在瞬间更新你的进度从0到100。可能没有足够的时间眨眼一次。 – nvoigt

+2

你的进度条是一个,太快了,两个,似乎与加载表单无关。 – LarsTech

+0

如何减慢进度条并使Form2的加载可见? –

回答

-3

尝试增加Application.DoEvents的循环:

For i = 0 To 100 
    BackgroundWorker1.ReportProgress(i) 
    Application.DoEvents 
next i 
+0

即使认为这将起作用,我绝不会建议任何**使用DoEvents,除非是非常罕见的情况。我过去曾多次被它咬过。 –

+1

我知道有关于使用DoEvents的猜想。我已经在这种情况下使用了它,并且它已经解决了这个问题,而没有引入任何新的问题。 –

+3

由于这在单独的线程中运行,我只会使用睡眠。没有DoEvents拥有的行李。 –