BackgroundWorker'DoWork'事件未触发 [英] BackgroundWorker 'DoWork' event not firing

查看:212
本文介绍了BackgroundWorker'DoWork'事件未触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可以很好地加载的表单,并且我正在尝试使用后台工作程序在任务加载时启动它.

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

下面的代码没有任何错误,但是bw.DoWork事件似乎没有触发.

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.

这是我的表格类-

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类-

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

推荐答案

将以下行添加到MyWorker构造函数("new"方法)中:

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

 bw.RunWorkerAsync()

这篇关于BackgroundWorker'DoWork'事件未触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆