gpt4 book ai didi

VB.NET 2008 后台 worker

转载 作者:行者123 更新时间:2023-12-03 13:13:41 25 4
gpt4 key购买 nike

我使用教程创建了一个后台工作人员。我了解一些基本知识,例如如何从其中更新标签或进度条。这个后台工作人员的目的是设置一堆变量,稍后其他几个后台工作人员将使用这些变量。我设置的变量是 6 个不同的列表和一个多维数组。目前后台工作人员的代码如下所示。

Private Sub My_BgWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles My_BgWorker.DoWork
For i As Integer = 0 To m_CountTo
' Has the background worker be told to stop?
If My_BgWorker.CancellationPending Then
' Set Cancel to True
'e.Cancel = True
Exit For
End If
System.Threading.Thread.Sleep(1000) ' Sleep for 1 Second
' Report The progress of the Background Worker.
My_BgWorker.ReportProgress(CInt((i / m_CountTo) * 100))
SetLabelText_ThreadSafe(Me.lbl_Status, FormatPercent(i / m_CountTo, 2))
Next
End Sub

setlabeltext 委托(delegate)看起来像这样
' The delegate
Delegate Sub SetLabelText_Delegate(ByVal [Label] As Object, ByVal [text] As String)

' The delegates subroutine.
Private Sub SetLabelText_ThreadSafe(ByVal [Label] As Object, ByVal [text] As String)
' InvokeRequired required compares the thread ID of the calling thread to the thread ID of the creating thread.
' If these threads are different, it returns true.
If [Label].InvokeRequired Then
Dim MyDelegate As New SetLabelText_Delegate(AddressOf SetLabelText_ThreadSafe)
Me.Invoke(MyDelegate, New Object() {[Label], [text]})
Else
[Label].Text = [text]
End If
End Sub

这一切都很好,但我试图找出一种简单的方法来设置我的列表。我设置其中一个列表的代码如下所示
Public Class Person
Public height As Integer
Public weight As Integer
Public age As Integer
Public sex As Integer
Public Sub New(ByVal height As Integer, ByVal weight As Integer, ByVal age As Integer, ByVal sex As String)
Me.height = height
Me.weight = weight
Me.age = age
Me.sex = sex
End Sub
End Class

Persons.Add(new person(180,210,28,"male"))

我通常会使用 persons.add将一些东西添加到列表中,但是我很难在后台工作人员内部以一种简单的方式将我的大脑包裹起来,以便将新值添加到几个不同的列表中(这些列表的数据值会有所不同)。是否有捷径可寻?我习惯于在 sub 的顶部调用来执行此操作,但这些调用似乎在 dowork sub 内部不起作用。

另外我的另一个问题是,一旦我开始工作并且我已经设置了我的列表,那么从其他后台工作人员内部的这些列表中提取数据的最简单方法是什么?任何帮助都会很棒,谢谢!

最佳答案

Backgroundworker 主要用于更新 ui 而不使其卡住。

将变量传递给其他后台工作线程是主线程的工作。您可以使用 runworkercompleted 等待填充完成并访问列表。如果您想在填充列表时访问数据,请使用报告进度事件来读取部分填充的列表并将其传递给其他工作线程。

关于VB.NET 2008 后台 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5657383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com