vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Variablen/Strings   |   VB-Versionen: VB.NET25.07.06
Parameter an Backgroundworker übergeben (VB 2005)

Dieser Tipp zeigt anhand eines Beispiels, wie Sie "Parameter" an die Backgroundworker-Ereignisse DoWork und ProgressChanged übergeben.

Autor:   Carsten StuplichBewertung:     [ Jetzt bewerten ]Views:  27.295 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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.
Da der Backgroundworker mit den Variablen „Pfad“ und „Dateityp“ aufgerufen werden soll, hab ich im Deklartionsbereich die UDT „TypeSucheParameter“ erstellt:

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.
Diese lesen wir nun im ProgresssChanged-Ereignis wieder mittels der Funktion „DirectCast“ aus und geben diese in einer ListView aus:

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.295 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel