vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 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 - Fortgeschrittene
Zugriff aus Thread auf Steuerelement ohne ständiges Invoke 
Autor: lyris
Datum: 11.04.10 00:02

Hallo, ich habe ein Performance-Problem und bekomme es nicht ganz in den Griff.
Da der Code insgesamt relativ umfänglich ist erstmal grob, was ich tue:

Ich möchte gerne ein relativ-performantes Sync-Tool schreiben um große Dateimengen zwischen zwei Speicherorten abzugleichen.

Ich habe eine Windows.Form Anwendung und eine Listbox.

Direkt in der Form analysiere ich die Unterschiede zwischen Quelle und Ziel und schreibe Deltas quasi in eine ArrayList. Sobald eine Differenz gefunden wurde, starte ich einen Thread, der sich darum kümmert, die Datei zu kopieren. Der Thread schnappt sich den/die Einträge und arbeitet sie ab. Ist die Liste nicht leer, startet der Thread sich neu und arbeitet den nächsten Eintrag ab, ist sie leer, setzte ich ein Flag damit ich in der Form selbst weiß: "Noch eine Änderung gefunden aber Thread war bereits fertig ==> Thread neu anstoßen".
Das funktioniert sehr gut nur würde ich jetzt gerne aus dem Thread heraus die Listbox mit Einträgen befüllen wie ("Datei xyz von a nach b kopiert"). Das mache ich bislang ungefähr so:


Public Partial Class MainForm
 (...)
 
Private Sub ThreadCode()
  (...)
  UpdateList(" » Kopiere Datei: " & citem.sourceFile.FullName)
  citem.sourceFile.CopyTo(citem.targetFile.FullName, True)
  citem.sourceFile.Attributes = citem.targetFile.Attributes
  (...)
  If Me.Worklist.Count > 0 Then
    Dim z As New System.Threading.Thread(AddressOf ThreadCode)
    z.start
  Else
   CopyThreadActive = False
Exit Sub
End Sub
 
Delegate Sub GenericOneParamDelegate(ByVal ItemText As String)
 
Private Sub UpdateList(ByVal ItemText As String)
   If ListBox.InvokeRequired then
        Dim z As New GenericOneParamDelegate(AddressOf UpdateList)
        Invoke (z, New Object() {ItemText})
   else
     Me.listBox.Items.Add(ItemText)
     Me.listBox.Update()
   end if
End Sub
 
End Class
So: Ich gebe u.a. auch bei der Analyse der Dateien Infos in die Listbox aus und bei meiner Lösung bekomme ich zwar keine Probleme wegen Illegal Cross-References aber: Reihenfolgenprobleme, da das Invoke sehr viel Zeit kostet. Bspw. sehe ich, daß der CopyThread schon 4 Dateien kopiert hat, bis die Analyse abgeschlossen ist, in der Listbox taucht aber erst auf "Analyse abgeschlossen" und dann erst die Namen der kopierten Files und das obwohl die Funktion UpdateList lange vor der Ausgabe "Analyse abgeschlossen" mit den Dateinamen aufgerufen wurde.

Hat jemand eine Idee oder einen Ansatz, wie ich das schaffe, ohne das langsame Invoke ?
Ich habs schon mit Events probiert, die der Thread auslöst aber das geht nicht schneller da ich auf das Invoke nicht verzichten kann.

Beitrag wurde zuletzt am 11.04.10 um 00:15:06 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Zugriff aus Thread auf Steuerelement ohne ständiges Invoke3.626lyris11.04.10 00:02
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.351ModeratorRalfE11.04.10 00:34
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.350lyris11.04.10 01:18
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.347ModeratorRalfE11.04.10 08:35
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.317lyris11.04.10 12:11
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.375ModeratorRalfE11.04.10 16:35
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.525lyris11.04.10 22:49
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.260ModeratorRalfE11.04.10 23:10
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.246Nico1983HH14.04.10 07:50
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.278chrixko14.04.10 09:51
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.271lyris17.04.10 01:21
Re: Zugriff aus Thread auf Steuerelement ohne ständiges Invo...2.271ModeratorRalfE17.04.10 09:06

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