Да. Это главная задача этого.
ользую BackgroundWorker и внутри него я использую цикл foreach, внутри которого я создаю новый поток, жду его завершения, а затем сообщаю о прогрессе и продолжаю цикл foreach. Вот о чем я говорю:
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);
}
}
Проблема в том, что память не освобождается после завершения потока (после прохождения строки «критическая точка»). Я думал, что когда поток не жив, все ресурсы, связанные с ним, будут освобождены. Но, видимо, это не так. Может кто-нибудь объяснить мне, почему и что я делаю не так. Благодарю.