자습서를 사용하여 백그라운드 작업자를 만들었습니다. 라벨이나 진행 바를 내부에서 업데이트하는 것과 같은 기본적인 것들을 이해합니다. 이 백그라운드 작업자의 목적은 나중에 여러 다른 백그라운드 작업자가 사용하게 될 일련의 변수를 설정하는 것입니다. 내가 설정하는 변수는 6 개의 다른 목록과 다차원 배열입니다. 이 코드는 현재 배경 작업자에게 이와 비슷합니다.VB.NET 2008 배경 작업자
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
이 모두 잘 작동하지만 난 내 목록을 설정하는 쉬운 방법을 알아 내려고 잃었어요처럼 보인다. 목록 중 설정 한 내 코드는 내가 일반적으로 목록에 무언가를 추가 할 persons.add
을 사용이
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"))
처럼 보이지만 나는 안에 쉽게 주위에 내 머리를 감싸는 정말 힘든 시간을 보내고있어 backgroundworker (데이터 값의 양이 달라질 수있는) 여러 개의 다른 목록에 새 값을 추가합니다. 이 작업을 수행하는 쉬운 방법이 있습니까? 나는 이것을하기 위해 서브의 꼭대기에서 호출하는 것만으로 익숙해졌지만, 그것들은 하위 작업의 하위에서는 작동하지 않는 것처럼 보입니다.
또 다른 질문은이 작업을 수행하고 내 목록을 설정했는데 다른 백그라운드 작업자의 목록에서 데이터를 가져 오는 가장 쉬운 방법은 무엇입니까? 어떤 도움이라도 좋을 것입니다, 감사합니다!
나는 누군가가 나에게 손을 줘 줄 수 있다면, 여전히 도움이 필요해, 고마워. – tye
가장 큰 문제는 동기화 일 가능성이 높습니다. 목록에 동시에 액세스하려고하는 두 개 이상의 작업자 스레드가있는 경우 동기화를 처리해야합니다. 다른 한편으로는 작업자가 하나씩 실행되도록 예약 할 수 있다면 한 번에 하나의 작업자 만 특정 목록에 도달 할 수 있어야하며 아무런 문제가 없어야합니다. – DarinH