所以我有这个包含名称的checklistbox,然后我想用这些名字做点什么。但目前它正在一次做一个名字,所以我想知道如何让这个多线程正常工作。这是在VB.net中供您参考。 以下是单线程循环的代码:
Dim selectedStreamers As New List(Of String)
For Each item In streamerList.CheckedItems
selectedStreamers.Add(item)
Next
For Each item In selectedStreamers
streamerOnline(item)
Select Case condition
Case StreamersCondition.Streaming
Me.Invoke(Sub() console.Text &= item + " is online." & vbNewLine)
Case StreamersCondition.Offline
Me.Invoke(Sub() console.Text &= item + " is offline." & vbNewLine)
Case StreamersCondition.UserNotFound
Me.Invoke(Sub() console.Text &= item + " hasn't been found." & vbNewLine)
End Select
Next
现在我尝试了Parallel.foreach,我似乎无法让它工作? 这是代码:
Parallel.ForEach(selectedStreamers, Sub(streamer)
streamerOnline(streamer)
System.Threading.Thread.Sleep(1000)
Select Case condition
Case StreamersCondition.Streaming
Me.Invoke(Sub() console.Text &= streamer + " is online." & vbNewLine)
Case StreamersCondition.Offline
Me.Invoke(Sub() console.Text &= streamer + " is offline." & vbNewLine)
Case StreamersCondition.UserNotFound
Me.Invoke(Sub() console.Text &= streamer + " hasn't been found." & vbNewLine)
End Select
End Sub)
此刻发生的事情是,它将通过第一个用户并完美地工作,然后当它到达第二个用户时,循环只是不允许用户转到streamerOnline(流媒体)因此它给出了用户输出与前一个用户相同的输出。此外,它有时冻结,不允许我退出。这可以通过解决这个问题来解决,但是将循环放在一个新线程中也是有益的 - 那么我该如何做呢?
感谢您提前收回费用。