title: Freeing resources when thread is not alive
body: <p>I am using BackgroundWorker and inside it I am using foreach loop, inside which i create new thread, wait for it to finish, and than report progress and continue foreach loop. Here is what I am talking about:</p>
  
  <pre><code>private void DoWork(object sender, DoWorkEventArgs e) {
              var fileCounter = Convert.ToDecimal(fileNames.Count());
              decimal i = 0;
              foreach (var file in fileNames) {
                  i++;
                  var generator = new Generator(assembly);
  
                  var thread = new Thread(new ThreadStart(
                          delegate() {
                              generator.Generate(file);
                          }));
                  thread.SetApartmentState(ApartmentState.STA);
                  thread.Start();
                  while (thread.IsAlive); // critical point
                  int progress = Convert.ToInt32(Math.Round(i / fileCounter * 100));
                  backgroundWorker.ReportProgress(progress);
              }
          }
  </code></pre>
  
  <p>The problem is that memory is not being freed after thread finishes (after "critical point" line is passed). I thought that when thread is not alive, all resources associated with it will be released. But apparently this is not true.
  Can anyone explain to me why and what am I doing wrong.
  Thanks.</p>