1

我希望对我的背景工作者有所帮助,因为我无法让它工作。基本上我有一个执行一些任务的后台工作人员,但我正在尝试实现一个进度条和一个标签。我将进度条的最大值设置为 10,然后随着每个任务的移动而更新它,我也在考虑一个带有进度条的标签,它将显示进度,即

Pb value = 2
20% completed

Pb value = 6
60% completed

等等。

到目前为止,我有这个用于编码。

更新*感谢您的帮助。

所以只是一个简单的问题,do work 事件会是这样吗?

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
4

2 回答 2

5

与其尝试设置进度条值DoWork(不在 UI 线程上运行),不如让 BackGroundWorker “报告”它的进度:

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

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

Private Sub BGWorker_ProgressChanged(ByVal sender As Object, _
                                     ByVal e As ProgressChangedEventArgs) _
                                     Handles BGWorker.ProgressChanged
  Me.Pb1.Value = e.ProgressPercentage
End Sub
于 2012-06-07T23:12:34.263 回答
4

你有几个问题:

  1. 你的代码不会编译。
  2. 您不会在BackgroundWorker任何地方创建。
  3. 您尚未分配ProgressChanged事件处理程序。
  4. 您根本不处理任何事件。

您必须执行所有这些操作才能使用BackgroundWorker. 一个很好的初学者教程位于http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx

于 2012-06-07T21:43:57.953 回答