Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von bla.
Backgroundworker und Progressbar
Johi,
Ich arbeite grade an einem kleinem Projekt, was eig. nur Dateien mit IO kopiert.
Nun habe ich die Frage, da ich den Backgroundworker benutze, wie ich den Fortschritt in einer Progressbar anzeigen lasse.
Danke
mittels bgw.reportprogress und dem entsprechenden event(in welchem du auf die form zugreifen kannst)
Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
BackgroundWorker
Bevor ich hier viel erkläre schau dir mal diese Video vom Softwareentwicklerblog an:
Im Prinzip musst du nur das ReportProcess Event abfangen, im ProcessWorker dieses Event auch erlauben und in der Sub die du im Hintergrund laufen lässt mit der Methode sender.ReportProcess (glaub ich zumindest dass sie so heißt) den Fortschritt aktualisieren.
Wie denn genau?
Bin nicht so gut
ein beispiel, dass ich mir immer mal wieder anschaue:
VB.NET-Quellcode
Imports System.ComponentModel
PublicClass Form1
PrivateWithEvents bgw AsNew BackgroundWorker
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'so startet man den bgw
bgw.RunWorkerAsync()
EndSub
PrivateSub Form1_FormClosing(ByVal sender AsObject, ByVal e As System.Windows.Forms.FormClosingEventArgs) HandlesMe.FormClosing
'prüft ob der bgw noch läuft und beendet diesen dann
'bedingung - siehe form_load
If bgw.IsBusy Then
bgw.CancelAsync()
EndIf
EndSub
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
'erlaubt zugriff auf die windows form
bgw.WorkerReportsProgress =True
'erlaubt unterbrechung des bgw z.b. wenn das programm beendet wird
bgw.WorkerSupportsCancellation =True
EndSub
#Region "BackGroundWorker Events"
PrivateSub bgw_DoWork(ByVal sender AsObject, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
Dim p AsLong
For i AsInteger=0To10000000
If bgw.CancellationPending =TrueThen e.Cancel =True : ExitSub
p +=1
Next
'um etwas in der windows form (anderer prozess) ausgeben zu können muss das
'bgw_progesschanged event ausgelöst werden
'z.b. so
bgw.ReportProgress(100, p) 'im zweiten parameter kann ein objekt übergeben werden
EndSub
PrivateSub bgw_ProgressChanged(ByVal sender AsObject, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
'von hier aus, kann auf die windows forms zugegriffen werden
'aber auch nur von hier aus
Label1.Text = e.UserState.ToString
EndSub
PrivateSub bgw_RunWorkerCompleted(ByVal sender AsObject, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted
If e.Cancelled =TrueThenMsgBox("nein")
MsgBox("ja")
'dieses event wird angesprungen, wenn alles was in bgw_dowork abgearbeitet wurde.
EndSub
#End Region
PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
bgw.CancelAsync()
EndSub
EndClass
Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!