【问题标题】:BackgroundWorker 'DoWork' event not firingBackgroundWorker 'DoWork' 事件未触发
【发布时间】:2013-12-11 16:38:41
【问题描述】:

我有一个可以正常加载的表单,我正在尝试在加载时使用 Background Worker 启动任务。

下面的代码没有出错,但bw.DoWork 事件似乎没有触发。

我在这里遗漏了什么吗?谢谢。

这是我的表单类 -

Public Class mainForm

    Dim objWorker As MyWorker

    Private Sub mainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Call Me.loadForm()
    End Sub

    Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
        Call Me.closeForm()
    End Sub

    Private Sub loadForm()

        Me.objWorker = New MyWorker ' Invoke the background worker

    End Sub

    Private Sub closeForm()

        Me.objWorker.bw_Cancel()    ' Cancel the background worker
        Me.Close()                  ' Close the form

    End Sub

End Class

这是我的 BackgroundWorker 类 -

Imports System.ComponentModel

Partial Public Class MyWorker

    Private bw As BackgroundWorker = New BackgroundWorker

    Public Sub New()

        bw.WorkerReportsProgress = False
        bw.WorkerSupportsCancellation = True
        AddHandler bw.DoWork, AddressOf bw_DoWork
        AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted

    End Sub

    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)

        Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
        For i = 1 To 10
            If bw.CancellationPending = True Then
                e.Cancel = True
                Exit For
            Else
                System.Threading.Thread.Sleep(500)
                MsgBox("iteration " & i)
            End If
        Next

    End Sub

    Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
        MsgBox("Complete!")
    End Sub

    Public Sub bw_Cancel()
        If bw.WorkerSupportsCancellation = True Then
            bw.CancelAsync()
        End If
    End Sub

End Class

【问题讨论】:

  • 您所做的就是创建它。你忘了调用 RunWorker 方法
  • 缺少对 RunWorkerAsync 的调用,但请check with this q/a,当表单关闭时,您可能会遇到正在运行的 BackgroundWorker 的问题
  • @Steve - 谢谢。现在还为时尚早,但我确实计划确保在表单关闭时 BackgroundWorker 不处于活动状态。

标签: vb.net backgroundworker


【解决方案1】:

将这一行添加到 MyWorker 构造函数('new' 方法):

 bw.RunWorkerAsync()

【讨论】:

  • 啊,是的,我现在在文档中看到了。谢谢,确实是这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
相关资源
最近更新 更多