Поиск файлов по папке и подпапкам (поправить код) - Visual Basic .NET
Формулировка задачи:
Есть код поиска файлов по маске:
Во время его работы форма зависает. Как бы его переделать с потоком или BackgroundWorker? Сам пробовал - не получилось.
Листинг программы
- Imports System
- Imports System.IO
- Public Class Form1
- Dim Dirs As String()
- Dim files As String()
- Dim cdir As String
- Private Sub Search(ByVal fold As String, ByVal mask As String)
- Try
- files = System.IO.Directory.GetFiles(fold, mask)
- Me.ListBox1.Items.AddRange(files)
- Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly)
- Catch ex As Exception
- End Try
- If Not Dirs Is Nothing Then
- For Each cdir In Dirs
- Me.Search(cdir, mask)
- Next
- End If
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Search("C:\", "*.png")
- End Sub
- End Class
Решение задачи: «Поиск файлов по папке и подпапкам (поправить код)»
textual
Листинг программы
- Imports System.Threading
- Public Class Form1
- Public Class Param
- Private _Fold As String
- Private _Mask As String
- Public Property Fold As String
- Get
- Return _Fold
- End Get
- Set(value As String)
- _Fold = value.ToString
- End Set
- End Property
- Public Property Mask As String
- Get
- Return _Mask
- End Get
- Set(value As String)
- _Mask = value.ToString
- End Set
- End Property
- End Class
- Private Delegate Sub Add_Range(ByVal T As String)
- Private Sub Write_2_lst(ByVal T As String)
- If Not (InvokeRequired) Then
- ListBox1.Items.Add(T)
- Else
- Invoke(New Add_Range(AddressOf Write_2_lst), T)
- End If
- End Sub
- Private Sub Search(p As Param)
- Dim Dirs() As String
- Dim files() As String
- Try
- files = System.IO.Directory.GetFiles(p.Fold, p.Mask)
- For i = 0 To files.Length - 1
- Write_2_lst(files(i))
- Next
- Catch
- End Try
- Try
- Dirs = System.IO.Directory.GetDirectories(p.Fold, "*", IO.SearchOption.TopDirectoryOnly)
- If Not Dirs Is Nothing Then
- For Each cdir In Dirs
- Dim p1 As New Param
- p1.Fold = cdir
- p1.Mask = p.Mask
- Search(p1)
- Next
- End If
- Catch
- End Try
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim p As New Param
- p.Fold = "C:\"
- p.Mask = "*.png"
- Dim th As New Thread(AddressOf Search)
- th.Start(p)
- End Sub
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д