2013-07-07 63 views
0

我试图让进度条显示当前进度,但由于某种原因进度条只显示在那里,没有任何事情发生。我使用下面的代码Progressbar没有被backgroundworker更新

Private Sub BuildApp_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BuildApp.ProgressChanged 
     Me.ProgressBar1.Value = e.ProgressPercentage 
End Sub 

我检查后台工作人员的属性是否设置为报告状态,并将其设置为“是”。另外,我检查了进度条的样式,它被设置为Blocks。任何帮助?

+0

从DoWork的内()处理程序需要调用ReportProgress(),并传递当前百分比值。你是这么做的?... –

+0

因此,这意味着我需要在bg工人的每个操作后手动键入一个值? –

+0

@KrešimirČulina是 - 背景工作者无法神奇地确定剩余工作量! – Blorgbeard

回答

4

这里有一个简单的例子...

Public Class Form1 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Button1.Enabled = False 
     BuildApp.RunWorkerAsync() 
    End Sub 

    Private Sub BuildApp_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BuildApp.DoWork 
     Dim someTotal As Integer = 12 
     For x As Integer = 1 To someTotal 
      System.Threading.Thread.Sleep(1000) ' simulated work 
      BuildApp.ReportProgress(x/someTotal * 100) ' pass the current percentage value 
     Next 
    End Sub 

    Private Sub BuildApp_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BuildApp.ProgressChanged 
     Me.ProgressBar1.Value = e.ProgressPercentage 
    End Sub 

    Private Sub BuildApp_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BuildApp.RunWorkerCompleted 
     MessageBox.Show("Done!") 
     Button1.Enabled = True 
    End Sub 

End Class 
+0

如果你没有一个像上面的例子那样很好的循环,那么你只需手动将ReportProgress()调用放在适当位置的代码中并使用适当的值。 –

+0

或者只是使用动画gif,如果它太难估计总时间。 http://stackoverflow.com/questions/13206926/vb-net-progressbar-backgroundworker/13486676#13486676 –

+1

如果你没有一个很好的“适合”具体的进展,那么只需将ProgressBar样式()属性设置为选取框。与动画GIF相同的东西... –