Очевидно, ваш конструктор RaceCar
возвращается только после завершения порожденного потока, поскольку вы вызываете Join
.
Public Sub New(ByVal carNumber as Integer)
me.carId = carNumber
Me.TestThread.Start()
Me.TestThread.Join()
End Sub
Я не знаю, является ли это преднамеренным (скорее всего, нет, потому что вы создаете свои экземпляры RaceCar
в цикле, поэтому у вас нет параллелизма, поскольку следующий экземпляр не может быть создан допредыдущий вызов конструктора возвращает), но определенно ваш основной поток не может завершиться, пока не завершатся все дочерние потоки.
Я предлагаю следующую реструктуризацию:
Удалите Join
из конструктора и добавьтеновый метод в вашем RaceCar
классе:
Public Sub JoinThread()
Me.TestThread.Join()
End Sub
Теперь цикл создания объекта не будет блокироваться.Затем добавьте еще один цикл:
Sub CreateRace()
For index As Integer = 1 to 5
raceTrack.Add(new RaceCar(index))
Next
// other work maybe?
For Each car As RaceCar In raceTrack
car.JoinThread()
Next
End Sub
Теперь ваши потоки будут запускаться в первом цикле, выполнять свою работу параллельно и в конечном итоге останавливаться на новом «барьерном цикле».
Обратите внимание, что основнойПоток все еще может выполнять другие задачи между двумя циклами.
(Отказ от ответственности: я никогда не программировал на vb.net, так что, надеюсь, то, что я написал, не совсем неверно.)