Помощь с очередью и многопоточностью (VB.net)

het17380

Пользователь
Регистрация
04.12.15
Сообщения
1
Реакции
0
Баллы
1
Привет всем, я очень надеюсь, что кто-нибудь сможет мне помочь, так как я изо всех сил пытаюсь получить это. Вот что я пытаюсь сделать..
Помощь с очередью и многопоточностью (VB.net)
У меня есть список элементов, которые я хочу поместить в очередь, а затем обработать, используя несколько потоков или действий. После обработки элемента я хочу добавить его вместе с результатом в ListView. Я, очевидно, не хочу получать дубликаты или пропускать элементы.

Ниже приведена часть кода, с которым я возился. Я изо всех сил пытался заставить работать пул потоков и нашел пример использования ConcurrentQueue и Action через Microsoft, вот что я включил. Это работает, но результаты содержат дубликаты и даже некоторые недостающие данные. Любая помощь будет очень признательна!

Код:
Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click 'create and add to queue Dim cq As New ConcurrentQueue(Of String)() For Each s As String In mainlist cq.Enqueue(s) Next lblTotalCnt.Text = cq.Count 'Action to consume the ConcurrentQueue Dim action As Action = Sub() For Each item As String In cq While cq.TryDequeue(item) 'Processing item and adding it to ListView here Try testString = item If PerformCheck(testString) = True Then Dim str(2) As String Dim itm As ListViewItem str(0) = testString str(1) = testUpdated itm = New ListViewItem(str) lstDetails.Items.Add(itm) lblAnalyzedCnt.Text = lblAnalyzedCnt.Text + 1 Else lblErrorsCnt.Text = lblErrorsCnt.Text + 1 End If Catch ex As Exception 'Handle exception here End Try End While Next End Sub 'Start 4 concurrent consuming actions Parallel.Invoke(action, action, action, action)
End Sub
Код (разметка):
 
Сверху Снизу