Hoi,
Voor de losse regel kan je ook de volgende proberen ipv vbNewLine:
Misschien dat die werken...
In mijn voorbeeld zou je dit toevoegen:
[CPP] ''//Alle bestanden in de huidige map ophalen:
Dim CurrentFolderFiles() As String = Directory.GetFiles(CurrentFolder, "*", SearchOption.TopDirectoryOnly)
For i2 As Integer = 0 To CurrentFolderFiles.Count - 1 Step 1
''//Scannen van de bestanden
''//Zo heb je de fileinfo van het bestand
Dim fs As FileInfo = New FileInfo(CurrentFolderFiles(i2))
Next[/CPP]
Waardoor het resultaat dit is: (het bovenstaande begint op regel 79)
[CPP]Imports System.IO
Imports System.Threading
Public Class Form1
''//Delegate subs zijn voor het multithreaden
Delegate Sub DelListviewAddItem(ByVal Item As String)
Delegate Sub DelSetProgressbar(ByVal Max As Integer, ByVal Value As Integer)
''//Hier maak ik alvast de thread aan zodat die door de hele form te gebruiken is
Private Thr As Thread = Nothing
''//Hier maak ik een variable aan die bepaald of de thread zichzelf af moet sluiten
Private ThrAlive As Boolean = False
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
''//Hier check ik wat er in de button staat. Bij "start" moet de thread gestart worden, bij "stop" moet de thread gestopt worden
If Button1.Text = "Start" Then
''//De listview leeg maken, bij het opnieuw beginnen moet de listview eerst leeg, anders krijg je dubbele
ListView1.Items.Clear()
''//De thread opnieuw aanmaken
Thr = New Threading.Thread(AddressOf Thread)
''//De button tekst op "Stop" zetten
Button1.Text = "Stop"
''//ThrAlive op True zetten zodat de thread niet meteen afsluit
ThrAlive = True
''//De thread ook werkelijk starten
Thr.Start()
ElseIf Button1.Text = "Stop" Then
''//Kijken of de thread al gemaakt is
If Not Thr Is Nothing Then
''//Kijken of de thread bezig is (beide zijn tegen fouten)
If Thr.IsAlive Then
''//ThrAlive op False zetten zodat de thread afsluit
ThrAlive = False
''//De button tekst aanpassen zodat de thread opnieuw gestart kan worden
Button1.Text = "Start"
End If
End If
End If
End Sub
Private Sub Thread()
''//Alle drives in een variable zetten
Dim Drives() As DriveInfo = DriveInfo.GetDrives
''//Een list maken waar alle folders in komen te staan als de thread klaar is
Dim Folders As New List(Of String)
''//Loopen door alle drives
For i As Integer = 0 To Drives.Count - 1 Step 1
''//Kijken of de drive klaar is
If Drives(i).IsReady Then
''//Een lijst maken met mappen die nog gechecked moeten worden
Dim FoldersToCheck As New List(Of String)
''//Een lijst maken met de mappen die toegankelijk zouden moeten zijn
Dim CheckedFolders As New List(Of String)
''//Alle folders in de RootDirectory van de drive in de FoldersToCheck lijst zetten
FoldersToCheck.AddRange(Directory.GetDirectories(Drives(i).Name, "*", SearchOption.TopDirectoryOnly))
''//Een counter maken om te kijken bij welk nummer we zijn in de lijst FoldersToCheck
Dim Counter As Integer = 0
''//Een counter maken zodat de loop ophoudt als de hele lijst gechecked is
Dim Maximum As Integer = FoldersToCheck.Count
''//Loopen totdat de hele lijst gechecked is (een for loop, maar zo kan je meer aanpassen)
Do Until Counter >= Maximum
''//Een try-block om alle fouten af te vangen
Try
''//De nieuw te checken map in een variable zetten
Dim CurrentFolder As String = FoldersToCheck(Counter)
''//Alle submappen van de map in een variable zetten
Dim SubDirs() As String = Directory.GetDirectories(CurrentFolder, "*", SearchOption.TopDirectoryOnly)
''//Het maxima verhogen met het aantal mappen wat nu ook nog gechecked moet worden
Maximum += SubDirs.Count
''//Alle gevonden mappen toevoegen aan de lijst FoldersToCheck zodat die ook nog gechecked worden voor submappen
FoldersToCheck.AddRange(SubDirs)
''//De map die gecontroleerd is op submappen in de lijst zetten met gecontroleerde mappen
CheckedFolders.Add(CurrentFolder)
''//De gecontroleerde map gelijk toevoegen aan de listbox (kan niet zomaar vanwege de thread)
ListviewAddItem(CurrentFolder)
''//Alle bestanden in de huidige map ophalen:
Dim CurrentFolderFiles() As String = Directory.GetFiles(CurrentFolder, "*", SearchOption.TopDirectoryOnly)
For i2 As Integer = 0 To CurrentFolderFiles.Count - 1 Step 1
''//Scannen van de bestanden
''//Zo heb je de fileinfo van het bestand
Dim fs As FileInfo = New FileInfo(CurrentFolderFiles(i2))
Next
Catch ex As UnauthorizedAccessException
''//Alleen UnauthorizedAccessExceptions afvangen zodat andere errors apart behandeld kunnen worden
Catch ex As Exception
''//Bij het afsluiten van de thread kreeg ik een foutmelding, maar zo wordt alleen die eruit gefilterd (hij was niet belangrijk)
If Not Thr.IsAlive Then
''//De rest van de fouten weergeven
MsgBox("Error: " & vbNewLine & ex.Message)
End If
Finally
''//De counter moet altijd met 1 verhoogd worden, ook als er een fout is opgetreden, anders blijft hij in dezelfde map hangen
Counter += 1
''//De progressbar moet ook altijd bijgewerkt worden (kan niet zoals normaal vanwege de thread)
SetProgressbar(Maximum, Counter)
End Try
''//Als de variable ThrAlive False is dan moet de For-loop afgesloten worden zodat de thread verder wel netjes kan sluiten
If Not ThrAlive Then
''//Uit de for-loop springen
Exit For
End If
Loop
''//Alle gecheckte mappen in de lijst Folders zetten
Folders.AddRange(CheckedFolders)
End If
Next
''//In de variable Folders staan alle mappen.
''//De thread netjes afsluiten (de progressbar op 0 zetten en de button een andere tekst geven)
ThreadDone()
End Sub
Private Sub ListviewAddItem(ByVal Item As String)
''//Als er een invoke nodig is, dan invoken (heeft met threading te maken)
If InvokeRequired Then
''//invoken
Dim d As New DelListviewAddItem(AddressOf ListviewAddItem)
Me.Invoke(d, New Object() {Item})
Else
''//Het item aan de listview toevoegen
ListView1.Items.Add(Item)
End If
End Sub
Private Sub SetProgressbar(ByVal Max As Integer, ByVal Value As Integer)
''//Als er een invoke nodig is, dan invoken (heeft met threading te maken)
If InvokeRequired Then
''//Invoken
Dim d As New DelSetProgressbar(AddressOf SetProgressbar)
Me.Invoke(d, New Object() {Max, Value})
Else
''//Progressbar maximum zetten op het aantal gevonden mappen
ProgressBar1.Maximum = Max
''//Progressbar value zetten op het aantal gecheckte mappen
ProgressBar1.Value = Value
End If
End Sub
Private Sub ThreadDone()
''//Als er een invoke nodig is, dan invoken (heeft met threading te maken)
If InvokeRequired Then
''//Invoken (gaat hier makkelijker omdat er geen variablen zijn)
Me.Invoke(New MethodInvoker(AddressOf ThreadDone))
Else
''//Button tekst op "Stop" zetten
Button1.Text = "Start"
''//Progressbar op 0 zetten
ProgressBar1.Value = 0
End If
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
''//Dit sluit het programma gelijk af. Het stopt alles meteen. Het is eigenlijk netter om het anders te doen
End
End Sub
End Class
[/CPP]
MartinJM