Liberar recursos quando o thread não estiver ativo

Estou usando o BackgroundWorker e dentro dele estou usando o loop foreach, no qual crio um novo thread, espero que ele termine e, em seguida, relate o progresso e continue o loop foreach. Aqui está o que eu estou falando:

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);
            }
        }

O problema é que a memória não está sendo liberada após o término do thread (após a passagem da linha "ponto crítico"). Eu pensei que quando o thread não estiver ativo, todos os recursos associados a ele serão liberados. Mas, aparentemente, isso não é verdade. Alguém pode me explicar por que e o que estou fazendo de errado. Obrigado

questionAnswers(3)

yourAnswerToTheQuestion