vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Backgroundworker: .Invoke() im DoWork 
Autor: keco
Datum: 15.02.09 20:12

Okay, dann mal ein bisschen Code:
Public NotInheritable Class Grundsystem
   Private Delegate Sub SearchObjectsDelegate(ByVal fsi As IO.FileSystemInfo)
   Private WithEvents SearchProcess As System.ComponentModel.BackgroundWorker
   Private WithEvents ChangeProcess As System.ComponentModel.BackgroundWorker
   Private pObjects As New FileSystemObjectCollection
   Private pListViewControl As ListView
   Private pDirectories As New List(Of String)
 
   Private Sub SearchProcess_DoWork(ByVal sender As System.Object, ByVal e As _
     System.ComponentModel.DoWorkEventArgs) Handles SearchProcess.DoWork
      For Each path As String In pDirectories
         SearchObjectsProcess(path, AddressOf ValidateObject)
      Next
   End Sub
 
   Private Sub SearchProcess_ProgressChanged(ByVal sender As Object, ByVal e As _
     System.ComponentModel.ProgressChangedEventArgs) Handles _
     SearchProcess.ProgressChanged
      Dim fso As FileSystemObject = CType(e.UserState, FileSystemObject)
      fso.Listed = True ' gibt an, ob das Element im ListView eingetragen ist
 
      pListViewControl.Items.Add(fso)
   End Sub
 
   Private Sub SearchProcess_RunWorkerCompleted(ByVal sender As Object, ByVal e _
     As System.ComponentModel.RunWorkerCompletedEventArgs) Handles _
     SearchProcess.RunWorkerCompleted
      pListViewControl.EndUpdate()
   End Sub
 
   Private Sub SearchObjectsProcess(ByVal path As String, ByVal action As _
     SearchObjectsDelegate)
      ' hier wird rekursiv der Ordner durchsucht (Code weggelassen)
      action(file)
   End Sub
 
   Private Sub ValidateObject(ByVal fsi As IO.FileSystemInfo)
      Dim fso As New FileSystemObject(fsi)
      ' hier wird dann auf Gültigkeit geprüft (Code weggelassen)
      SearchProcess.ReportProgress(1, fso)
   End Sub
 
 
 
   Private Sub ChangeProcess_DoWork(ByVal sender As System.Object, ByVal e As _
     System.ComponentModel.DoWorkEventArgs) Handles ChangeProcess.DoWork
      For Each item As FileSystemObject In pObjects.Objects
         ChangeObjectsProcess(item)
      Next
   End Sub
 
   Private Sub ChangeProcess_ProgressChanged(ByVal sender As Object, ByVal e As _
     System.ComponentModel.ProgressChangedEventArgs) Handles _
     ChangeProcess.ProgressChanged
      Dim item As FileSystemObject = CType(e.UserState, FileSystemObject)
 
      Select Case e.ProgressPercentage
         Case 0
            item.SubItems(1).Text = "Fehler"
         Case 1
            item.SubItems(1).Text = "verändert"
      End Select
   End Sub
 
   Private Sub ChangeProcess_RunWorkerCompleted(ByVal sender As Object, ByVal e _
     As System.ComponentModel.RunWorkerCompletedEventArgs) Handles _
     ChangeProcess.RunWorkerCompleted
 
   End Sub
 
   Private Sub ChangeObjectsProcess(ByVal item As FileSystemObject)
      ' hier sollen die Elemente, die im ListView checked sind verarbeitet 
      ' werden und je nachdem der ReportsProgress ausgeführt werden
   End Sub
FileSystemObject ist also eine von mir erstellte Klasse, die von ListViewItem erbt. FileSystemObjectCollection eine Liste, die IList(Of FileSystemObject) implementiert und die entsprechenden Eigenschaften zur Verfügung stellt. Die Eigenschaften geben dann eine List zurück, was ich mit Hilfe von LINQ erreicht habe (durch Hilfe im Forum).
Im ChangeProcess_DoWork-Ereignis wird pObjects.Objects aufgerufen. Das sind dann alle Dateien, die im ListView eingetragen sind, also dessen Eigenschaft Listed auf True steht.

Zu dem Fehler, den ich meinte: Wenn ich mir ChangeProcess_DoWork im Debugg-Modus anschaue und mit der Maus über "Item" fahre, dann werden mir ja alle Eigenschaften angezeigt und deren Inhalt. Siehe Bild: http://img165.imageshack.us/img165/6447/screentj3.jpg
Mit dem Virtual ListView hatte ich mich mal beschäftigt, bekam es aber nie zum Laufen, leider. Hier im Forum habe ich mit diesem Suchbegriff auch nicht viel gefunden, nur einen Link auf eine Seite, welche ich damals aber auch hatte und den Code nicht umschreiben konnte in VB.NET.

Achso.. Noch zu dem letzten Punkt: Das heißt, es wäre sinnvoll, wenn meine FileSystemObjectCollection nicht IList(Of ) implementiert, sondern diese BindingList und meine FileSystemObject-Klasse dazu noch INotifyPropertyChanged?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Backgroundworker: .Invoke() im DoWork4.346keco13.02.09 12:56
Re: Backgroundworker: .Invoke() im DoWork2.876ModeratorRalf Ehlert13.02.09 13:07
Re: Backgroundworker: .Invoke() im DoWork2.871ModeratorFZelle13.02.09 13:10
Re: Backgroundworker: .Invoke() im DoWork2.865keco13.02.09 13:15
Re: Backgroundworker: .Invoke() im DoWork2.843ModeratorRalf Ehlert13.02.09 14:51
Re: Backgroundworker: .Invoke() im DoWork2.887ModeratorDaveS13.02.09 15:03
Re: Backgroundworker: .Invoke() im DoWork2.738keco13.02.09 15:15
Re: Backgroundworker: .Invoke() im DoWork4.909keco15.02.09 13:43
Re: Backgroundworker: .Invoke() im DoWork2.921ModeratorFZelle15.02.09 18:30
Re: Backgroundworker: .Invoke() im DoWork3.125keco15.02.09 20:12
Re: Backgroundworker: .Invoke() im DoWork2.718ModeratorFZelle16.02.09 15:14
Re: Backgroundworker: .Invoke() im DoWork2.666keco16.02.09 16:55
Re: Backgroundworker: .Invoke() im DoWork2.892ModeratorFZelle16.02.09 17:26
Re: Backgroundworker: .Invoke() im DoWork2.659keco16.02.09 18:36
Re: Backgroundworker: .Invoke() im DoWork2.778keco17.02.09 13:30
Re: Backgroundworker: .Invoke() im DoWork2.694ModeratorFZelle17.02.09 16:35
Re: Backgroundworker: .Invoke() im DoWork2.885keco17.02.09 16:44
Re: Backgroundworker: .Invoke() im DoWork2.862ModeratorFZelle18.02.09 00:36
Re: Backgroundworker: .Invoke() im DoWork2.770keco18.02.09 00:42
Re: Backgroundworker: .Invoke() im DoWork2.709ModeratorFZelle18.02.09 13:45
Re: Backgroundworker: .Invoke() im DoWork2.637keco18.02.09 14:14

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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