如何为每个循环多线程VB.net

时间:2017-10-01 03:03:32

标签: vb.net multithreading loops parallel-processing threadpool

所以我有这个包含名称的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(流媒体)因此它给出了用户输出与前一个用户相同的输出。此外,它有时冻结,不允许我退出。这可以通过解决这个问题来解决,但是将循环放在一个新线程中也是有益的 - 那么我该如何做呢?

感谢您提前收回费用。

0 个答案:

没有答案