Du mußt mehrer Sachen beachten,
1 Du mußt Du den Parameter WorkerReportsProgress auf True setzen.
2 Du kannst nur in dem Ereignis ProgressChanged auf andere Komponenten des Formulars zugreifen (diese Sachen wurden ja nicht von deinem Thread kreiert und gestartet)
Hier mal ein Beispiel.
Du benötigst dafür e:
Textbox (vergiß nicht, die Textbox auf "Multiline = True" zu setzen
Button
Backgroundworke
Progressbar
Die Namen habe ich mal so übernommen, wie diese beim hinzufügen der Komponenten vergeben worden sind
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
'*** Die Werte können auch im Eigenschaftsfenster eingestellt werden
BackgroundWorker1.WorkerReportsProgress = True 'Werte können ausgegeben
' werden
'Bei einem BackgroundWorker1.CancelAsync wird der BackgroundWorker1
' beendet
BackgroundWorker1.WorkerSupportsCancellation = True 'Ein abbrechen
' erlauben
'*****
BackgroundWorker1.RunWorkerAsync() 'Backgroundworker starten
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As _
System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'In diesem Abschnitt wird die Arbeit vollbracht ;-)
Dim prozent As Int32
Dim a As Int32 = 0
Dim ende As Int32 = 1000
For a = 0 To ende
If a Mod 2 = 0 Then
prozent = CInt(a * 100 / ende)
'Im ersten Parameter wird die Prozentzahl übergeben und beim
' zweiten alles andere,
'was man nacher auswerten möchte (Strings, Array usw.)
BackgroundWorker1.ReportProgress(prozent, a)
End If
Next
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal _
e As System.ComponentModel.ProgressChangedEventArgs) Handles _
BackgroundWorker1.ProgressChanged
'Ausgabe der Ergebniss
Dim prozent As String = e.ProgressPercentage
Dim meldung As String = CType(e.UserState, String)
TextBox1.Text += meldung
ProgressBar1.Value = prozent
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles _
BackgroundWorker1.RunWorkerCompleted
'Hier kommt der Code rein, wenn der BackgroundWorker1_DoWork seine Arbeit
' erledigt hat
MsgBox("Soderle, Feierabend für heute :-)")
End Sub
End ClassGruß
Lars
Visual Basic Express 2010, C# Express 2010
Intel? i7 Core 920@2.63 Ghz, 6 GByte DDR3, 1024 MB ATI? Radeon? 5870, Windows 7 Prof. 64 Bit
Gibson SG 61' Reissue ; Ibanez Prestige RG 2550 E, Marshall Valvestate VS100 + Modell Vs412 (4 x 12''), Cubase Studio |