Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 29th, 2012  |  syntax: None  |  size: 1.67 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How to ensure instances of class finish before main terminates?
  2. Imports System
  3. Imports System.Threading
  4. Imports System.Collections.Generic
  5. Module Module1
  6.     Private raceTrack As New List(Of RaceCar)
  7.     Sub Main()
  8.         CreateRace()
  9.         'Main() would quit when the 5 car objects are created =[
  10.         'How do I make sure Main will not exit until all racecars are done?
  11.     End Sub
  12.  
  13.     Sub CreateRace()
  14.         For index As Integer = 1 to 5
  15.             raceTrack.Add(new RaceCar(index))
  16.         Next
  17.     End Sub
  18.  
  19.     Public Class RaceCar
  20.         Private testThread as Thread =  New Thread(AddressOf StartEngine)
  21.         Private carId as Integer
  22.         Public Sub New(ByVal carNumber as Integer)
  23.             me.carId = carNumber
  24.             Me.TestThread.Start()
  25.             Me.TestThread.Join()
  26.         End Sub
  27.  
  28.         Public Sub StartEngine()
  29.             Console.WriteLine(String.Format("Car#{0} is going!", Me.carId))
  30.             Thread.Sleep(100*Me.carId)
  31.             Console.WriteLine(String.Format("Car#{0} is DONE!", Me.carId))
  32.         End Sub
  33.  
  34.     End Class
  35.  
  36. End Module
  37.        
  38. Public Sub New(ByVal carNumber as Integer)
  39.         me.carId = carNumber
  40.         Me.TestThread.Start()
  41.         Me.TestThread.Join()
  42.     End Sub
  43.        
  44. Public Sub JoinThread()
  45.     Me.TestThread.Join()
  46. End Sub
  47.        
  48. Sub CreateRace()
  49.     For index As Integer = 1 to 5
  50.         raceTrack.Add(new RaceCar(index))
  51.     Next
  52.  
  53.     // other work maybe?
  54.  
  55.     For Each car As RaceCar In raceTrack
  56.         car.JoinThread()
  57.     Next
  58. End Sub
  59.        
  60. Public Sub New(ByVal carNumber As Integer)
  61.     Me.carId = carNumber
  62.     Me.testThread.IsBackground = False ' <--This will cause threads to be 'Foreground'
  63.     Me.testThread.Start()
  64. End Sub