Да. Это главная задача этого.

ользую 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);
            }
        }

Проблема в том, что память не освобождается после завершения потока (после прохождения строки «критическая точка»). Я думал, что когда поток не жив, все ресурсы, связанные с ним, будут освобождены. Но, видимо, это не так. Может кто-нибудь объяснить мне, почему и что я делаю не так. Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос