Hi folks I have the code below which i wanted to use all my processors cores. Originally, the code in the sub chekFileDupe was all within the For..Next loop in SearchForDupes sub and worked just fine on one thread. I'm a bit stuck as to create 4 threads that execute the checkFileDupe code so that i can check 4 items at a time, then wait till all 4 threads have completed. Then carry on with the next iteration of the loop.
This is the original code
Private Sub SearchForDupes()
    Me.Refresh()
    Dim totalrecords As Integer = dvSortedSearchResults.Count
    Label1.Text = "Searching for duplicates"
    Label1.Refresh()
    dvSortedSearchResults.Sort = DataSortOrder
    For i = 0 To totalrecords - 6 Step 4
        Dim TrackDifference As Integer
        Dim originalTrack, originalArtist, trackToCompare, artistToCompare As String
        If i / 10 = CInt(i / 10) Then
            Label2.Text = i.ToString + " of " + totalrecords.ToString
            Label2.Refresh()
        End If
        originalArtist = mp3record(i, "Artist")
        originalTrack = mp3record(i, "Track")
        Dim ii As Integer = i + 1
        While ii < totalrecords - 2
            artistToCompare = mp3record(ii, "Artist")
            trackToCompare = mp3record(ii, "Track")
            TrackDifference = Difference(originalTrack, trackToCompare)
            dvSortedSearchResults(ii).Item("Difference") = TrackDifference
            'dgvSearchResults.Rows(ii).Cells("Difference").Value = trackdiff
            If Difference(originalArtist, artistToCompare) < 6 Then
                TrackDifference = Difference(originalTrack, trackToCompare)
                If TrackDifference < 4 Then
                    dvSortedSearchResults(i).Item("Difference") = 999
                    dvSortedSearchResults(ii).Item("Difference") = TrackDifference
                    dvSortedSearchResults(ii).Item("chkdupe") = True
                End If
            Else
                Exit While
            End If
            ii = ii + 1
        End While
    Next
    Label2.Text = ""
    Label1.Text = ""
End Sub
This is the first attempt at multithreading - probably naive but hey - everyone's new at something
Private Sub SearchForDupes()
        'Dim query = (From record In dvSortedSearchResults Where record.Artist = "Abba" Select record).ToList
        Me.Refresh()
        Dim totalrecords As Integer = dvSortedSearchResults.Count
        Label1.Text = "Searching for duplicates"
        Label1.Refresh()
        dvSortedSearchResults.Sort = DataSortOrder
        Dim params(2) As Integer
        For i = 0 To totalrecords - 6 Step 4
            params(2) = totalrecords
            params(1) = i
            thread1 = New System.Threading.Thread(Sub() checkFileDupe(params))
            thread1.Start()
            params(1) = i + 1
            thread2 = New System.Threading.Thread(Sub() checkFileDupe(params))
            thread2.Start()
            params(1) = i + 2
            thread3 = New System.Threading.Thread(Sub() checkFileDupe(params))
            thread3.Start()
            params(1) = i + 3
            thread4 = New System.Threading.Thread(Sub() checkFileDupe(params))
        Next
        Label2.Text = ""
        Label1.Text = ""
    End Sub
    Private Sub checkFileDupe(params As Array)
        Dim i As Integer = params(1)
        Dim totalrecords As Integer = params(2)
        Dim TrackDifference As Integer
        Dim originalTrack, originalArtist, trackToCompare, artistToCompare As String
        If i / 10 = CInt(i / 10) Then
            Label2.Text = i.ToString + " of " + totalrecords.ToString
            Label2.Refresh()
        End If
        originalArtist = mp3record(i, "Artist")
        originalTrack = mp3record(i, "Track")
        Dim ii As Integer = i + 1
        While ii < totalrecords - 2
            artistToCompare = mp3record(ii, "Artist")
            trackToCompare = mp3record(ii, "Track")
            TrackDifference = Difference(originalTrack, trackToCompare)
            dvSortedSearchResults(ii).Item("Difference") = TrackDifference
            'dgvSearchResults.Rows(ii).Cells("Difference").Value = trackdiff
            If Difference(originalArtist, artistToCompare) < 6 Then
                TrackDifference = Difference(originalTrack, trackToCompare)
                If TrackDifference < 4 Then
                    dvSortedSearchResults(i).Item("Difference") = 999
                    dvSortedSearchResults(ii).Item("Difference") = TrackDifference
                    dvSortedSearchResults(ii).Item("chkdupe") = True
                End If
            ii = ii + 1
        End While
    End Sub     Else
                Exit While
            End If