Originariamente inviato da eziogsv
Sei molto gentile nel suggerirmi di scrivere un codice più veloce... saresti stato ancor più gentile suggerendomi quale.
Come già suggerivo qual 3D fa questo codice, che utilizza una funzione ricorsiva e più efficiente del codice che hai scritto di circa il 20-25%.

codice:
 Sub ListFiles(ByVal pattern As String, ByVal dir_info As DirectoryInfo)
        Try
            Dim info() As FileInfo = dir_info.GetFiles(pattern)
            For Each fs_info As FileInfo In info
                Try
                    Dim fs As FileStream = New FileStream(fs_info.FullName, FileMode.Open, _
                      FileAccess.Read, FileShare.Read)
                    Dim sr As StreamReader = New StreamReader(fs)
                    FileReader = sr.ReadToEnd
                    sr.Close()
                    fs.Close()
                Catch ex As Exception
                End Try

            Next fs_info
            info = Nothing

            Dim subdirs() As DirectoryInfo = dir_info.GetDirectories()
            For Each subdir As DirectoryInfo In subdirs
                ListFiles(pattern, subdir)
            Next subdir
        Catch ex As Exception
        End Try
    End Sub

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim s As New System.IO.DirectoryInfo("C:\Programmi")
        ListFiles("*.txt", s)     
    End Sub

Preciso a tuo rilievo che il ciclo è inserito in un Try... Catch con relativa completa gestione degli errori... non ho messo tutto il codice perché assolutamente ininfluente ai fini della domanda da me posta.
Assolutamente non va bene, se durante la lettura dei file nella funzione:

codice:
My.Computer.FileSystem.GetFiles....
nel ciclo For...Each

codice:
 For Each foundFile As String In My.Computer.FileSystem.GetFiles(.........)
                
 Next
si verificasse un'eccezione (esempio di accesso a una directory o file) puoi si gestire l'eccezione che si verifica con un blocco Try.....Catch ma purtroppo ti perdi i restanti file che la funzione doveva restituire.