Mighty,
First let me say that I am multi threading. The form with the progress bars is the main form and the threads raise an event back to the main form to increment the progress bar. Here is an event handler.
Private Sub WIRSPrgrsBarEvntHndlr()
If Me.WIRSBar.Value >= WIRSBar.Maximum Then
Me.WIRSBar.Value = 1
End If
Me.WIRSBar.PerformStep()
Me.Refresh()
End Sub
It is 'invoked' when the thread raises the event.
Public Sub PrgrsStepMthd(ByVal bar As Integer) _
Handles MWPrsr.Prgrsbar, CPrsr.Prgrsbar, BTPrsr.Prgrsbar, MWTPrsr.Prgrsbar, _
FOPrsr.Prgrsbar, SILSPrsr.Prgrsbar, MkByPrsr.Prgrsbar, BAIPrsr.Prgrsbar, _
StkrPrsr.Prgrsbar, TestPrsr.Prgrsbar, UDIS.Prgrsbar, WIRS.Prgrsbar
Select Case bar
Case 1
If Me.MWBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf MWPrgrsBarEvntHndlr))
End If
Case 2
If Me.CoderBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf CoderPrgrsBarEvntHndlr))
End If
Case 3
If Me.BtTgBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf BtTgPrgrsBarEvntHndlr))
End If
Case 4
If Me.MWTBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf MWTPrgrsBarEvntHndlr))
End If
Case 5
If Me.FOBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf FOPrgrsBarEvntHndlr))
End If
Case 6
If Me.SILSBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf SILSPrgrsBarEvntHndlr))
End If
Case 7
If Me.MkByBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf MkByPrgrsBarEvntHndlr))
End If
Case 8
If Me.BAIBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf BAIPrgrsBarEvntHndlr))
End If
Case 9
If Me.STKBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf STKPrgrsBarEvntHndlr))
End If
Case 10
If Me.TestBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf TestPrgrsBarEvntHndlr))
End If
Case 12
If Me.UDISBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf UDISPrgrsBarEvntHndlr))
End If
Case 13
If Me.WIRSBar.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf WIRSPrgrsBarEvntHndlr))
End If
End Select
End Sub
I also update a label above the appropriate progress bar when necessary by raising an event from the thread.
Private Sub WIRSLabelEvntHndlr()
Me.WRSLabel.Text = lbltxt
Me.Refresh()
End Sub
This is 'invoked' by:
Public Sub LblHndlrMthd(ByVal lbl As Integer, ByVal lbltext As String) _
Handles MWPrsr.UpdtLbl, CPrsr.UpdtLbl, BTPrsr.UpdtLbl, MWTPrsr.UpdtLbl, _
FOPrsr.UpdtLbl, SILSPrsr.UpdtLbl, MkByPrsr.UpdtLbl, BAIPrsr.UpdtLbl, _
StkrPrsr.UpdtLbl, TestPrsr.UpdtLbl, WIRS.UpdtLbl
lbltxt = lbltext
Select Case lbl
Case 1
If Me.MWLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf MWLabelEvntHndlr))
End If
Case 2
If Me.CoderLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf CoderLabelEvntHndlr))
End If
Case 3
If Me.BtTgLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf BtTgLabelEvntHndlr))
End If
Case 4
If Me.MWTLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf MWTLabelEvntHndlr))
End If
Case 5
If Me.FOLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf FOLabelEvntHndlr))
End If
Case 6
If Me.SILSLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf SILSLabelEvntHndlr))
End If
Case 7
If Me.MkByLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf MkByLabelEvntHndlr))
End If
Case 8
If Me.BAILabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf BAILabelEvntHndlr))
End If
Case 9
If Me.STKLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf STKLabelEvntHndlr))
End If
Case 10
If Me.TstFrmLbl.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf TstFrmLabelEvntHndlr))
End If
Case 11
If Me.TstToLbl.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf TstToLabelEvntHndlr))
End If
Case 13
If Me.WRSLabel.InvokeRequired = True Then
Me.Invoke(New EventHandler(AddressOf WIRSLabelEvntHndlr))
End If
End Select
End Sub
Here is the thread specific information
Public Event ClrPrgrsbar(ByVal Bar As Integer)
Public Event UpdtLbl(ByVal lbl As Integer, ByVal lblinfo As String)
RaiseEvent UpdtLbl(9, "Extracting Data From " & infile.Name)
RaiseEvent Prgrsbar(9)
My threads are classes instantiated in the main form
Dim thrdWIRS As System.Threading.Thread
Dim WithEvents WIRS As New CL_ExtrctWIRS()
and spawned
thrdWIRS = New System.Threading.Thread(AddressOf WIRS.Parser)
thrdWIRS.Start()
This might be a little more information than you were looking for but I hope it helps.
It took a lot of learning and searching to get to what I have here since I had no clue what I was doing when I started.
Shawn