Поиск файлов по папке и подпапкам (поправить код) - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Есть код поиска файлов по маске:
Листинг программы
  1. Imports System
  2. Imports System.IO
  3. Public Class Form1
  4. Dim Dirs As String()
  5. Dim files As String()
  6. Dim cdir As String
  7. Private Sub Search(ByVal fold As String, ByVal mask As String)
  8. Try
  9. files = System.IO.Directory.GetFiles(fold, mask)
  10. Me.ListBox1.Items.AddRange(files)
  11. Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly)
  12. Catch ex As Exception
  13. End Try
  14. If Not Dirs Is Nothing Then
  15. For Each cdir In Dirs
  16. Me.Search(cdir, mask)
  17. Next
  18. End If
  19. End Sub
  20. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  21. Search("C:\", "*.png")
  22. End Sub
  23. End Class
Во время его работы форма зависает. Как бы его переделать с потоком или BackgroundWorker? Сам пробовал - не получилось.

Решение задачи: «Поиск файлов по папке и подпапкам (поправить код)»

textual
Листинг программы
  1. Imports System.Threading
  2. Public Class Form1
  3.     Public Class Param
  4.         Private _Fold As String
  5.         Private _Mask As String
  6.  
  7.         Public Property Fold As String
  8.             Get
  9.                 Return _Fold
  10.             End Get
  11.             Set(value As String)
  12.                 _Fold = value.ToString
  13.             End Set
  14.         End Property
  15.  
  16.         Public Property Mask As String
  17.             Get
  18.                 Return _Mask
  19.             End Get
  20.             Set(value As String)
  21.                 _Mask = value.ToString
  22.             End Set
  23.         End Property
  24.     End Class
  25.  
  26.     Private Delegate Sub Add_Range(ByVal T As String)
  27.  
  28.     Private Sub Write_2_lst(ByVal T As String)
  29.         If Not (InvokeRequired) Then
  30.             ListBox1.Items.Add(T)
  31.         Else
  32.             Invoke(New Add_Range(AddressOf Write_2_lst), T)
  33.         End If
  34.     End Sub
  35.  
  36.     Private Sub Search(p As Param)
  37.  
  38.         Dim Dirs() As String
  39.         Dim files() As String
  40.  
  41.         Try
  42.             files = System.IO.Directory.GetFiles(p.Fold, p.Mask)
  43.             For i = 0 To files.Length - 1
  44.                 Write_2_lst(files(i))
  45.             Next
  46.         Catch
  47.         End Try
  48.         Try
  49.             Dirs = System.IO.Directory.GetDirectories(p.Fold, "*", IO.SearchOption.TopDirectoryOnly)
  50.             If Not Dirs Is Nothing Then
  51.                 For Each cdir In Dirs
  52.  
  53.                     Dim p1 As New Param
  54.  
  55.                     p1.Fold = cdir
  56.                     p1.Mask = p.Mask
  57.                     Search(p1)
  58.  
  59.                 Next
  60.             End If
  61.         Catch
  62.         End Try
  63.  
  64.     End Sub
  65.  
  66.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  67.         Dim p As New Param
  68.         p.Fold = "C:\"
  69.         p.Mask = "*.png"
  70.         Dim th As New Thread(AddressOf Search)
  71.         th.Start(p)
  72.     End Sub
  73.  
  74. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы