Распространенным способом достижения этого является использование счетчика, защищенного семафором. (Мне кажется, ваш код VB. Я не знаю VB, поэтому мой синтаксис, вероятно, отключен, рассматривайте его как псевдокод).
Сначала вам нужно настроить семафор и счетчик:
' a semaphore is a counter, you decrease it with WaitOne() and increase with Release()
' if the value is 0, the thread is blocked until someone calls Release()
Dim lock = new Semaphore(0, 1)
Dim threadcount = 10 ' or whatever
В конце функции, выполняемой пулом потоков, необходимо уменьшить счетчик потоков и снять блокировку, если число потоков равно 0
threadcount = threadcount - 1
if threadcount = 0 then
lock.Release()
end if
во время ожидания ваших потоков попробуйте получить семафор, который будет блокироваться до тех пор, пока кто-то не вызовет release:
lock.WaitOne()
для операции уменьшения и проверки, описанной выше, вы, вероятно, захотите поместить это в отдельную подпрограмму. Вам также необходимо защитить это, чтобы каждый поток, который пытается получить доступ к счетчику, был изолирован от других потоков.
dim counterMutex = new Mutex()
sub decreaseThreadCount()
counterMutex.WaitOne()
threadcount = threadcount - 1
if threadcount = 0 then
lock.Release()
end if
counterMutex.release()
end sub