Я пишу загрузчик на C # и остановился на следующей проблеме: какой метод мне следует использовать для распараллеливания загрузок и обновления моего графического интерфейса?
В моей первой попытке я использовал 4 потока, и по завершении каждого из них я запустил еще один: основная проблема заключалась в том, что мой процессор загружается на 100% при каждом запуске нового потока.
Погуглил, я обнаружил существование BackgroundWorker и ThreadPool: заявляя, что я хочу обновить свой графический интерфейс с учетом прогресса каждой загружаемой мной ссылки, какое решение является лучшим?
1) Создание 4 разных BackgroundWorker, присоединение к каждому событию ProgressChanged делегата функции в моем графическом интерфейсе для обновления хода выполнения?
2) Использовать ThreadPool и установить одинаковое значение для максимального и минимального количества потоков?
Если я выберу № 2, когда в очереди больше нет потоков, остановится ли 4 рабочих потока? Это их приостанавливает? Поскольку мне нужно загружать разные списки ссылок (по 20 ссылок в каждой) и переходить от одной к другой, когда одна из них завершена, ThreadPool запускает и останавливает потоки между каждым списком?
Если я хочу изменить количество работающих потоки в реальном времени и решили использовать ThreadPool, изменив количество потоков с 10 на 6, генерирует ли он исключение и останавливает 4 случайных потока?
Это единственная часть, которая вызывает у меня головную боль. Заранее благодарю каждого из вас за ответы.