与背景工作者的进展酒吧

Jac*_*row 1 .net vb.net vb.net-2010

我希望能为我的背景工作者提供一些帮助,因为我无法让它工作.基本上我有一个背景工作者,它完成一些任务,但我正在尝试实现进度条和标签.我将进度条的最大值设置为10,然后随着每个任务的移动更新它,我也想到一个带有进度条的标签,它将显示进度,即

Pb value = 2
20% completed

Pb value = 6
60% completed
Run Code Online (Sandbox Code Playgroud)

等等.

到目前为止,我有这个编码.

更新*谢谢你的帮助.

那么,一个简单的问题是,工作事件会是这样吗?

Private Sub BGWorker_DoWork(ByVal sender As Object, _
                            ByVal e As DoWorkEventArgs) _
                            Handles BGWorker.DoWork
  For i as Integer = 1 to 2
    'My task code 1
    BGWorker.ReportProgress(i)
  Next

 For i as Integer = 3 to 4
    'My task code 2
    BGWorker.ReportProgress(i)
  Next

 For i as Integer = 5 to 6
    'My task code 3
    BGWorker.ReportProgress(i)
  Next

 For i as Integer = 7 to 8
    'My task code 4
    BGWorker.ReportProgress(i)
  Next

 For i as Integer = 9 to 10
    'My task code 5
    BGWorker.ReportProgress(i)
  Next
End Sub
Run Code Online (Sandbox Code Playgroud)

Lar*_*ech 5

DoWork您需要让BackGroundWorker"报告"它的进度,而不是尝试设置进度条值(不在UI线程上运行):

Private Sub BGWorker_DoWork(ByVal sender As Object, _
                            ByVal e As DoWorkEventArgs) _
                            Handles BGWorker.DoWork
  For i as Integer = 1 to 10
    BGWorker.ReportProgress(i)
  Next
End Sub
Run Code Online (Sandbox Code Playgroud)

然后在您的ProgressChanged活动中,您可以设置进度条的值:

Private Sub BGWorker_ProgressChanged(ByVal sender As Object, _
                                     ByVal e As ProgressChangedEventArgs) _
                                     Handles BGWorker.ProgressChanged
  Me.Pb1.Value = e.ProgressPercentage
End Sub
Run Code Online (Sandbox Code Playgroud)