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