如何解决VB.NET 2008后台工作者
| 我已经使用教程创建了背景工作者。我了解一些基本内容,例如如何从标签内部更新标签或进度条。该后台工作程序的目的是设置一堆变量,稍后其他几个后台工作人员将使用这些变量。我要设置的变量是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委托看起来像这样
\' 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\"))
我通常会使用ѭ3来向列表中添加一些内容,但是我很难将自己的大脑包裹在背景工作人员内部的一种简便方法上,以便为几个不同的列表添加新值(数量会有所不同)数据值)。是否有捷径可寻?我曾经习惯在子程序的顶部进行调用,但是这些似乎在dowork子程序中不起作用。
另外我的另一个问题是,一旦我开始工作并设置好列表,从其他后台工作人员的那些列表中提取数据的最简单方法是什么?任何帮助将是巨大的,谢谢!
解决方法
Backgroundworker主要用于更新ui而不冻结它。
将变量传递给其他后台工作线程是主线程的工作。您可以使用runworkercompleted等待填充完成并访问列表。如果要在填充列表时访问数据,请使用report progress事件读取部分填充的列表,并将其传递给其他工作线程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。