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 thatDim AddThread AsNew Threading.Thread(AddressOf AddNumber)Dim SubstractThread AsNew Threading.Thread(AddressOf SubstractNumber)Dim DivideThread AsNew Threading.Thread(AddressOf DivideNumber)'Declare the variable for holding the result Dim addResult AsIntegerDim SubStractResult AsIntegerDim DivisionResult AsDoubleDim bFinishAddition AsBoolean=FalseDim bFinishSubstration AsBoolean=FalseDim bFinishDivision AsBoolean=FalseDim bShownAdditionResult AsBoolean=FalseDim bShownDivisionResult AsBoolean=FalseDim bShownSubstractionResult AsBoolean=FalseSub 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 =FalseOr bFinishDivision =FalseOr bFinishSubstration =False
Threading.Thread.Sleep(50)'UI thread is sleepingIf bFinishAddition AndNot bShownAdditionResult Then
Console.WriteLine("Addition Result : "& addResult)
bShownAdditionResult =TrueEndIfIf bFinishSubstration AndNot bShownSubstractionResult Then
Console.WriteLine("Substraction Result : "& SubStractResult)
bShownSubstractionResult =TrueEndIfIf bFinishDivision AndNot bShownDivisionResult Then
Console.WriteLine("Division Result : "& DivisionResult)
bShownDivisionResult =TrueEndIfEndWhile
Console.WriteLine("")
Console.WriteLine("Finished all threads.")
Console.ReadKey()EndSubPrivateSub AddNumber()Dim n1 AsInteger=22Dim n2 AsInteger=11For i AsInteger=0To100
addResult = addResult +(n1 + n2)
Threading.Thread.Sleep(50)'sleeping Add threadNext
bFinishAddition =TrueEndSubPrivateSub SubstractNumber()Dim n1 AsInteger=22Dim n2 AsInteger=11For i AsInteger=0To80
SubStractResult = SubStractResult -(n1 - n2)
Threading.Thread.Sleep(50)Next
bFinishSubstration =TrueEndSubPrivateSub DivideNumber()Dim n1 AsInteger=22Dim n2 AsInteger=11For i AsInteger=0To60
DivisionResult = DivisionResult +(n1 / n2)
Threading.Thread.Sleep(50)Next
bFinishDivision =TrueEndSubEndModule