Program gets every filename from a folder, then creates a text list of unique extensions found and the frequency. In this case there are around 35000 files. I put most of the work into the Background Worker but the UI freezes anyway until it is finished. Code is:
Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.Text
Imports System.IO
Public Class Form1
Private Counter As Integer = 0
Private SB As New StringBuilder
Private Filenames As ReadOnlyCollection(Of String)
Private Frequencies As New SortedDictionary(Of String, Integer)
Private Extension As String = ""
Private Filename As String = ""
Private Sub BtnStart_Click(sender As Object, e As EventArgs) Handles BtnStart.Click
TxtProgress.Clear()
TxtResults.Clear()
SB.Clear()
Frequencies.Clear()
Filenames = My.Computer.FileSystem.GetFiles("G:\Steve-DELLSERVER\SharedProgs&Data", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
BGW1.RunWorkerAsync()
End Sub
Private Sub BGW1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BGW1.DoWork
For Counter = 0 To Filenames.Count - 1
If Counter Mod 10000 = 0 Then
BGW1.ReportProgress(Counter)
End If
Filename = Filenames(Counter)
Extension = Path.GetExtension(Filename).ToUpper
If Frequencies.ContainsKey(Extension) Then
Frequencies(Extension) += 1
Else
Frequencies.Add(Extension, 1)
End If
Next
End Sub
Private Sub BGW1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BGW1.ProgressChanged
TxtProgress.Text = e.ProgressPercentage.ToString
End Sub
Private Sub BGW1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BGW1.RunWorkerCompleted
TxtProgress.Text = "File # " & Filenames.Count.ToString.ToString & " of " & Filenames.Count.ToString
For Each KVP As KeyValuePair(Of String, Integer) In Frequencies
SB.AppendLine(KVP.Key & vbTab & KVP.Value.ToString)
Next
TxtResults.Text = SB.ToString
End Sub
End Class