Benutzer mit den meisten Antworten
Progressbar per Backgroundworker

Frage
-
Hallo,
ich versuche Verzweifelt über eine Progressbar den Fortschritt einer Prozedur anzuzeigen der über ein Backgroundworker läuft.
per Debug hab ich alle Prozedurschritte nachverfolgt so das er sogar den Befehl pbLadebalken.value= e.ProgressPercentage
ausführt (e.ProgressPercentage enthält sogar ein Wert) aber will mir Perdu nicht die Änderung des Progessbar anzeigen.
Habe es sogar mit Applications.doevents aus probiert aber ohne Erfolg.
Irgenwas hab ich im Zusammenspiel mit dem Backgroundworker noch nicht Verstanden.
Dank euch für eure Hilfe
Daniel
- Bearbeitet Robert Breitenhofer Donnerstag, 13. Januar 2011 08:36 Formatierung
Antworten
-
Hallo Daniel,
ein DoEvents oder andere Eingriffe sind nicht nötig. Leg mal ein Formular an (WinForms oder Wpf) mit einem Button & einem Progressbar; das kleine Beispiel zählt von 1 bis 100 in 0,2 sek Steps und aktualisert in "ProgressChanged" Event des BackGroundWorker die Fortschrittsanzeige:
Imports System.ComponentModel
Public Class Form1
Private WithEvents mWorker As BackgroundWorker
Private Sub DoSomeWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
For i = 1 To 100
mWorker.ReportProgress(i)
' Ein bisschen warten
Threading.Thread.Sleep(200)
Next
End Sub
Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click
'BackgroundWorker erstellen ...
mWorker = New BackgroundWorker
mWorker.WorkerReportsProgress = True
AddHandler mWorker.DoWork, AddressOf DoSomeWork
'.. und starten
mWorker.RunWorkerAsync()
End Sub
Private Sub mWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles mWorker.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub
End Class
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Konrad Neitzel Mittwoch, 5. Januar 2011 06:43
- Als Antwort markiert Robert Breitenhofer Donnerstag, 13. Januar 2011 09:36
-
Hallo,
ich versuche Verzweifelt über eine Progressbar den
Fortschritt einer Prozedur anzuzeigen der über ein
Backgroundworker läuft.
per Debug hab ich alle Prozedurschritte nachverfolgt
so das er sogar den Befehl
pbLadebalken.value= e.ProgressPercentage ausführt
(e.ProgressPercentage enthält sogar ein Wert) aber will
mir Perdu nicht die Änderung des Progessbar anzeigen.
Habe es sogar mit Applications.doevents aus probiert
aber ohne Erfolg..doevents ist hier sicher nicht das richtige Mittel.
Irgenwas hab ich im Zusammenspiel mit dem
Backgroundworker noch nicht Verstanden.Unter
www.gssg.de -> Visual Basic -> VB.net
-> Multithreading / Backgroundworker
-> BackGroundWorker-Threadingfindest Du ein Beispiel, bei dem mehrere Threads
via BackGroundWorker laufen und dabei auch eine
Progressbar kontinuierlich angesteuert wird.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
Dank euch für eure Hilfe
Daniel- Als Antwort markiert Robert Breitenhofer Donnerstag, 13. Januar 2011 09:36
Alle Antworten
-
Hallo Daniel,
ein DoEvents oder andere Eingriffe sind nicht nötig. Leg mal ein Formular an (WinForms oder Wpf) mit einem Button & einem Progressbar; das kleine Beispiel zählt von 1 bis 100 in 0,2 sek Steps und aktualisert in "ProgressChanged" Event des BackGroundWorker die Fortschrittsanzeige:
Imports System.ComponentModel
Public Class Form1
Private WithEvents mWorker As BackgroundWorker
Private Sub DoSomeWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
For i = 1 To 100
mWorker.ReportProgress(i)
' Ein bisschen warten
Threading.Thread.Sleep(200)
Next
End Sub
Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click
'BackgroundWorker erstellen ...
mWorker = New BackgroundWorker
mWorker.WorkerReportsProgress = True
AddHandler mWorker.DoWork, AddressOf DoSomeWork
'.. und starten
mWorker.RunWorkerAsync()
End Sub
Private Sub mWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles mWorker.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub
End Class
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Konrad Neitzel Mittwoch, 5. Januar 2011 06:43
- Als Antwort markiert Robert Breitenhofer Donnerstag, 13. Januar 2011 09:36
-
Hallo,
ich versuche Verzweifelt über eine Progressbar den
Fortschritt einer Prozedur anzuzeigen der über ein
Backgroundworker läuft.
per Debug hab ich alle Prozedurschritte nachverfolgt
so das er sogar den Befehl
pbLadebalken.value= e.ProgressPercentage ausführt
(e.ProgressPercentage enthält sogar ein Wert) aber will
mir Perdu nicht die Änderung des Progessbar anzeigen.
Habe es sogar mit Applications.doevents aus probiert
aber ohne Erfolg..doevents ist hier sicher nicht das richtige Mittel.
Irgenwas hab ich im Zusammenspiel mit dem
Backgroundworker noch nicht Verstanden.Unter
www.gssg.de -> Visual Basic -> VB.net
-> Multithreading / Backgroundworker
-> BackGroundWorker-Threadingfindest Du ein Beispiel, bei dem mehrere Threads
via BackGroundWorker laufen und dabei auch eine
Progressbar kontinuierlich angesteuert wird.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
Dank euch für eure Hilfe
Daniel- Als Antwort markiert Robert Breitenhofer Donnerstag, 13. Januar 2011 09:36
-
Hallo zusammen,
Dank euch erstmal für die Hilfe.
Die Verfahrensweise war mir bereits bekannt. Nur lief es trotzem nicht.
Nun hab ich den Feher zwar gefunden aber nicht Verstanden.......
Und zwar wollte ich die bwWorker.ReportProgress(0, "Aloftdaten werden werden geholt....") methode aus einer Public MustInherit Class herraus aufrufen
in dieser Klasse konnte ich aber den bwWorkerthread nicht direkt erreichen und muste die UmgebendeKlasse angeben
(frmHauptblatt.bwworker.ReportProgress.....)
Ausserdem habe ich den bwworker per Drag&Drop aus der Toolbox auf die frmHaupt gezogen.
Ich vermute das es irgenwas mit den Zugriffsberechtigungen zwischen den Klassen zutun hatte.
Habe jetz den bwworker direckt in einem Modul instanzisiert und dort auch die Prozeduren geschrieben
und nun läuft es
Ich will das Problem das ich hatte nicht nur beseitigen sonder auch Verstehen.
Es waren alle Prozeduren und Klassen Public gesetz eine noch höhere Freigabe gibt es ja net. Trotzdem lief es so wie oben Beschrieben nicht...Hab ich da was flasch gemacht (mit den Klassen)
Schönen Tag euch
Daniel
- Bearbeitet Robert Breitenhofer Donnerstag, 13. Januar 2011 08:44 Formatierung
-
Hallo B00NE,
Freut uns dass Du es lösen könntest.
Habe einmal auch so etwas in VB.NET gemacht indem ich eine Datei von einem FTP Server heruntergeladen habe und den Fortschritt in einer ProgressBar angezeigt habe. BackgroundWorker war dabei.
Grüße,
Robert