BackgroundWorker 'DoWork' event not firing

雨燕双飞 提交于 2019-12-25 03:08:36

问题


I have a form that loads just fine, and I'm trying to fire off a task using a Background Worker as it loads.

I'm getting no errors with the code below, but the bw.DoWork event doesn't seem to be firing.

Am I missing something here? Thanks.

Here is my form Class -

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

Here is my BackgroundWorker Class -

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

回答1:


add to MyWorker constructor ('new' method) this line:

 bw.RunWorkerAsync()


来源:https://stackoverflow.com/questions/20524799/backgroundworker-dowork-event-not-firing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!