vb.net - 如何启动 Backgroundworker ByRef
问题描述
我想为后台工作人员分配一个自定义名称,所以我创建了一个自定义类:
Public Class NamedBKW
Public BKW As BackgroundWorker
Public Name As String
Public Sub New(ByVal thisBKW As BackgroundWorker, ByVal thisName As String)
BKW = thisBKW
Name = thisName
End Sub
End Class
我有一个这些 NamedBKW 的列表,我想通过循环迭代来一次启动一个。该列表是在程序启动时构建的。
Friend Sub StartService()
[...]
BuildLists()
For x As Integer = 0 To ListOfBKWs.Count - 1
StartThisThread(ListOfBKWs(x).BKW, ListOfBKWs(x).Name)
Thread.Sleep(3000)
Next
End Sub
Public Sub BuildLists()
[...]
' List of BKWs:
' Note that the order listed here will determine the order they are started.
ListOfBKWs = New List(Of NamedBKW)
ListOfBKWs.Add(New NamedBKW(ScheduleCheckerBKW, "ScheduleChecker"))
ListOfBKWs.Add(New NamedBKW(BackupStage5BKW, "Stage 5"))
ListOfBKWs.Add(New NamedBKW(BackupStage4BKW, "Stage 4"))
ListOfBKWs.Add(New NamedBKW(BackupStage3BKW, "Stage 3"))
ListOfBKWs.Add(New NamedBKW(BackupStage2BKW, "Stage 2"))
ListOfBKWs.Add(New NamedBKW(BackupStage1BKW, "Stage 1"))
ListOfBKWs.Add(New NamedBKW(DeleteOldFilesBKW, "DeleteOldFiles"))
ListOfBKWs.Add(New NamedBKW(FixerBKW, "Fixer"))
ListOfBKWs.Add(New NamedBKW(ThreadCheckerBKW, "ThreadChecker"))
End Sub
Public Sub StartThisThread(ByRef thisBKW As BackgroundWorker, ByVal thisName As String)
NPC.WriteToConsoleAndLog("MAIN: Starting " & thisName & " thread...")
thisBKW = New BackgroundWorker
thisBKW.WorkerReportsProgress = True
thisBKW.WorkerSupportsCancellation = True
thisBKW.RunWorkerAsync()
End Sub
但由于某种原因,这不起作用。控制台/日志打印它正在启动每个线程的消息,但线程实际上并没有启动。我究竟做错了什么?
所有的 Backgroundworkers 都在主类中声明,如下所示:
Friend WithEvents BackupStage1BKW As New BackgroundWorker
解决方案
你有这样的声明来创建后台工作对象:
Friend WithEvents BackupStage1BKW As New BackgroundWorker
但是,您所显示的内容中没有任何内容表明这些工人实际上做了任何事情。如果有一个方法来处理DoWork
作为声明的一部分连接的每个工人的事件WithEvents
,我们看不到它。
我暂时假设这些方法确实存在并且正确订阅了这些事件。在这种情况下,我们进入下一个问题。这一行覆盖了声明的对象:
thisBKW = New BackgroundWorker
您现在拥有全新的对象,并且之前存在的任何事件处理程序都不再适用。
你真的不想要那条线,你也不想要 ByRef
这里。请记住,ByVal 仍然传递引用!唯一的区别是它传递了引用的副本,事实证明这正是您大部分时间所需要的。
推荐阅读
- javascript - 无法用包含 [ 和 ] 的字符串替换我的字符串
- mysql - 选择查询以使用连接选择一些可能不存在的表
- jquery - 使用脚本暂停 Mixcloud
- php - 在 PHP 中使用 AES-128 密钥和盐解密数据
- git - 使用 git 在各种提交中将文件移动到不同的文件夹
- java-io - 在java中写入文件时最后一行不完整
- google-app-maker - 表上的多重排序
- c# - c#中的Http Async Post,Raspberry Pi,数据不发布
- maven - 如何将 SAP MTA(多目标应用程序)转换为 Maven 项目?
- qt - 为什么 Qt .pro 文件根据不同平台添加源不起作用?