Я действительно не понимаю, почему вы делаете детали реализации, такие как фоновые рабочие, видимыми в пользовательском интерфейсе.Ну, немного кода.Использовать очередь не имеет смысла, потоки не заканчиваются в любом предсказуемом порядке.Давайте составим список:
Dim workerList As New List(Of BackgroundWorker)
Вы хотите воспользоваться событием RunWorkerCompleted, вызванным BGW, чтобы узнать, когда задание выполнено.Так что используйте AddHandler:
Dim bgw As New BackgroundWorker
AddHandler bgw, AddressOf DoSomeWork
AddHandler bgw, AddressOf WorkDone
workerList.Add(bgw)
'' Do something with the grid
''...
bgw.RunWorkerAsync()
И обработчик событий может выглядеть так:
Private Sub WorkDone(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
If e.Error IsNot Nothing Then Throw e.Error
Dim bgw = DirectCast(sender, BackgroundWorker)
workerList.Remove(bgw)
'' Do something with the grid
End Sub