How to dynamically create a background worker in VB.net

后端 未结 3 1682
谎友^
谎友^ 2020-12-18 17:32

I have a VB.net project which uses a background worker to do some stuff.

Now I want to expand the project to be able to do multiple stuff :)

A user can enter

3条回答
  •  情歌与酒
    2020-12-18 17:46

    Here is how

    Public Class Form
        Private Workers() As BackgroundWorker
        Private NumWorkers = 0
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            NumWorkers = NumWorkers + 1
            ReDim Workers(NumWorkers)
            Workers(NumWorkers) = New BackgroundWorker
            Workers(NumWorkers).WorkerReportsProgress = True
            Workers(NumWorkers).WorkerSupportsCancellation = True
            AddHandler Workers(NumWorkers).DoWork, AddressOf WorkerDoWork
            AddHandler Workers(NumWorkers).ProgressChanged, AddressOf WorkerProgressChanged
            AddHandler Workers(NumWorkers).RunWorkerCompleted, AddressOf WorkerCompleted
            Workers(NumWorkers).RunWorkerAsync()
        End Sub
    
    End Class
    

    Then the handlers

    Private Sub WorkerDoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)
        ' Do some work
    End Sub
    
    Private Sub WorkerProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
        ' I did something!
    End Sub
    
    Private Sub WorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
        ' I'm done!
    End Sub
    

    Imagine multithreading could be so easy. This works great unless you have 1000's of workers. The sender argument in each handler can be used to check which worker is reporting progress etc..

提交回复
热议问题