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.508 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! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. 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. |