Multithreading
Multithreading using Thread Class
Section titled “Multithreading using Thread Class”This example uses the Thread Class, but multithreaded applications can also be made using BackgroundWorker. The AddNumber, SubstractNumber, and DivideNumber functions will be executed by separate threads:
Edit: Now the UI thread waits for the child threads to finish and shows the result.
Module Module1 'Declare the Thread and assign a sub to that Dim AddThread As New Threading.Thread(AddressOf AddNumber) Dim SubstractThread As New Threading.Thread(AddressOf SubstractNumber) Dim DivideThread As New Threading.Thread(AddressOf DivideNumber)
'Declare the variable for holding the result Dim addResult As Integer Dim SubStractResult As Integer Dim DivisionResult As Double
Dim bFinishAddition As Boolean = False Dim bFinishSubstration As Boolean = False Dim bFinishDivision As Boolean = False
Dim bShownAdditionResult As Boolean = False Dim bShownDivisionResult As Boolean = False Dim bShownSubstractionResult As Boolean = False
Sub Main()
'Now start the trheads AddThread.Start() SubstractThread.Start() DivideThread.Start()
'Wait and display the results in console Console.WriteLine("Waiting for threads to finish...") Console.WriteLine("")
While bFinishAddition = False Or bFinishDivision = False Or bFinishSubstration = False Threading.Thread.Sleep(50) 'UI thread is sleeping If bFinishAddition And Not bShownAdditionResult Then Console.WriteLine("Addition Result : " & addResult) bShownAdditionResult = True End If
If bFinishSubstration And Not bShownSubstractionResult Then Console.WriteLine("Substraction Result : " & SubStractResult) bShownSubstractionResult = True End If
If bFinishDivision And Not bShownDivisionResult Then Console.WriteLine("Division Result : " & DivisionResult) bShownDivisionResult = True End If
End While
Console.WriteLine("") Console.WriteLine("Finished all threads.") Console.ReadKey() End Sub
Private Sub AddNumber() Dim n1 As Integer = 22 Dim n2 As Integer = 11
For i As Integer = 0 To 100 addResult = addResult + (n1 + n2) Threading.Thread.Sleep(50) 'sleeping Add thread Next bFinishAddition = True End Sub
Private Sub SubstractNumber() Dim n1 As Integer = 22 Dim n2 As Integer = 11
For i As Integer = 0 To 80 SubStractResult = SubStractResult - (n1 - n2) Threading.Thread.Sleep(50) Next bFinishSubstration = True End Sub
Private Sub DivideNumber() Dim n1 As Integer = 22 Dim n2 As Integer = 11 For i As Integer = 0 To 60 DivisionResult = DivisionResult + (n1 / n2) Threading.Thread.Sleep(50) Next bFinishDivision = True End Sub
End Module