title: C# Downloader: should I use Threads, BackgroundWorker or ThreadPool?
body: <p>I'm writing a downloader in C# and stopped at the following problem: what kind of method should I use to parallelize my downloads and update my GUI?</p>
  
  <p>In my first attempt, I used 4 Threads and at the completion of each of them I started another one: main problem was that my cpu goes 100% at each new thread start.</p>
  
  <p>Googling around, I found the existence of BackgroundWorker and ThreadPool: stating that I want to update my GUI with the progress of each link that I'm downloading, what is the best solution?</p>
  
  <p>1) Creating 4 different BackgroundWorker, attaching to each ProgressChanged event a Delegate to a function in my GUI to update the progress?</p>
  
  <p>2) Use ThreadPool and setting max and min number of threads to the same value?</p>
  
  <p>If I choose #2, when there are no more threads in the queue, does it stop the 4 working threads? Does it suspend them? Since I have to download different lists of links (20 links each of them) and move from one to another when one is completed, does the ThreadPool start and stop threads between each list?</p>
  
  <p>If I want to change the number of working threads on live and decide to use ThreadPool, changing from 10 threads to 6, does it throw and exception and stop 4 random threads?</p>
  
  <p>This is the only part that is giving me an headache.
  I thank each of you in advance for your answers.</p>