Dieser Tipp zeigt anhand eines Beispiels, wie Sie "Parameter" an die Backgroundworker-Ereignisse DoWork und ProgressChanged übergeben. So können Sie innerhalb des ProgessChanged-Ereignisses z.B. eine Listview mit den Parametern die so vom DoWork-Ereignis aus übergeben haben befüllen. In unserem Beispiel sollen die Dateien eines Ordners in einem Listview aufgelistet werden. Structure TypeSuchParameter Dim Pfad As String Dim Dateityp As String End Structure Und nun der Aufruf des Background-Workers mit unserer UDT: Private Sub btnSearch_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSearch.Click Dim SuchUDT As TypeSuchParameter With SuchUDT .Pfad = txtFolder.Text .Dateityp = cmbType.SelectedItem ' Wenn kein Datentyp angegeben wurde, ' dann *.* als Wildcard verwenden If .Dateityp = Nothing Then .Dateityp = "*.*" ' Prüfen ob ein Ordner angegeben wurde If .Dateityp = "" Then MessageBox.Show("Bitte wählen Sie zu erst einen Ordner aus.", _ "Ordner noch auswählen", MessageBoxButtons.OK, _ MessageBoxIcon.Stop) Exit Sub End If End With ' Liste löschen ListView1.Items.Clear() ' Backgroundworker mit Pfad als Parameter starten BackgroundWorker1.RunWorkerAsync(SuchUDT) End Sub Und nun das DoWork Ereignis, in der wir mit Hilfe der Funktion „DirectCast“ die übergebene UDT auslesen: Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, _ ByVal e As System.ComponentModel.DoWorkEventArgs) _ Handles BackgroundWorker1.DoWork ' Hinweis: Im Ereignisses "DoWork" können Sie nicht auf Forms zugreifen Dim i As Integer ' Übergebene UDT (enthält Pfad und Wildcard) auslesen ' (der 2te Parameter muss dem Typ der zu setzenden Variable ' entsprechen - Hier "TypeSuchParameter") Dim tmpSucheUDT As TypeSuchParameter = DirectCast(e.Argument, _ TypeSuchParameter) ' Wenn Sie nur einen String übergeben anstatt einem UDT wird ' dieser wie folgt ausgelesen: ' Dim BeipsielString As String = DirectCast(e.Argument, String) ' Dateien in diesem Ordner ermitteln Dim Dateien() As String = Directory.GetFiles(tmpSucheUDT.Pfad, _ tmpSucheUDT.Dateityp) ' Jetzt die Namen der Dateien einzeln an das Ereignis ' "ProgressChanged" übergeben. For Each Datei As String In Dateien ' Abbrechen wenn Cancel-Button gedrück wurde erlauben If BackgroundWorker1.CancellationPending Then e.Cancel = True Return End If ' Fortschritt in Prozent melden und Datei übergeben ' (Zum Prozentwert wird 1 Addiert, um Fehler "Division ' durch 0" zu verhindern, ' wenn keine Datei gefunden wurde) BackgroundWorker1.ReportProgress((i + 1) * 100 / _ (Dateien.Length + 1), Datei) i += 1 Next End Sub Die gefundenen Dateien (inkl. Pfad) wurden im DoWork-Ereignis an das ProgressChanged-Ereignis über die Variable „Datei“ übergeben. Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, _ ByVal e As System.ComponentModel.ProgressChangedEventArgs) _ Handles BackgroundWorker1.ProgressChanged Dim Datei As String = DirectCast(e.UserState, String) ' Gefundene Datei in Listtview ausgeben Dim itemX As System.Windows.Forms.ListViewItem itemX = ListView1.Items.Add(ListView1.Items.Count.ToString, Datei, "") ' Status in Progressbbar ausgeben ToolStripProgressBar1.Value = e.ProgressPercentage End Sub Dieser Tipp wurde bereits 27.331 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |