Каким костылем можно узнать что завершены/заснули все потоки ThreadPool?
Приветствую всех. Необходимо вызвать метод eventCompleted после завершения работы (засыпания) всех потоков из ThreadPool. У компонента "BackgroundWorker" есть на этот счет стандартный эвент, у пула такового нет (вероятно в следствии того что потоки не завершаются а засыпают). Поиски в сети ни к чему не привели, кроме того что "используй таски и треды", в моем случае нельзя терять обратную совместимость с устаревшими версиями фреймворка. Есть ли костыль/велосипед, который помог-бы решить сию проблему (while не в счет)?
Так введите переменную счетчик, как запускаете задачу, то сразу Interlocked.Increment(ref counter); как завершаете, то Interlocked.Decrement(ref counter);. Достиг нуля значит надо вызвать eventCompleted
Я обычно сохраняю ссылку на каждый экземпляр потока (объект Thread) в коллекции или массиве. Там можно проверять свойство IsAlive, ну и прибить тоже можно, если нужно (метод Abort() )