Загрузчик C #: следует ли мне использовать Threads, BackgroundWorker или ThreadPool?

Я пишу загрузчик на C # и остановился на следующей проблеме: какой метод мне следует использовать для распараллеливания загрузок и обновления моего графического интерфейса?

​​В моей первой попытке я использовал 4 потока, и по завершении каждого из них я запустил еще один: основная проблема заключалась в том, что мой процессор загружается на 100% при каждом запуске нового потока.

Погуглил, я обнаружил существование BackgroundWorker и ThreadPool: заявляя, что я хочу обновить свой графический интерфейс с учетом прогресса каждой загружаемой мной ссылки, какое решение является лучшим?

1) Создание 4 разных BackgroundWorker, присоединение к каждому событию ProgressChanged делегата функции в моем графическом интерфейсе для обновления хода выполнения?

2) Использовать ThreadPool и установить одинаковое значение для максимального и минимального количества потоков?

Если я выберу № 2, когда в очереди больше нет потоков, остановится ли 4 рабочих потока? Это их приостанавливает? Поскольку мне нужно загружать разные списки ссылок (по 20 ссылок в каждой) и переходить от одной к другой, когда одна из них завершена, ThreadPool запускает и останавливает потоки между каждым списком?

Если я хочу изменить количество работающих потоки в реальном времени и решили использовать ThreadPool, изменив количество потоков с 10 на 6, генерирует ли он исключение и останавливает 4 случайных потока?

Это единственная часть, которая вызывает у меня головную боль. Заранее благодарю каждого из вас за ответы.

6
задан CodingWithSpike 2 August 2011 в 17:49
поделиться