У меня проблемы с этим кодом. Я использую.Net (С#) с приложением Winform.
У меня есть цикл foreach для файлов внутри каталога, и с каждым файлом я хочу запустить поток с некоторыми функциями. Проблема в том, что цикл не ждет завершения потока, и результат получается, если у меня есть 5 файлов, я получаю 5 потоков друг с другом сделать мой компьютер заморозить.. возможно ли приостановить цикл до конца потока, а затем продолжить цикл для других потоков?
foreach (string f in Directory.GetFiles(txtPath.Text))
{
Thread threadConversion = new Thread(new ParameterizedThreadStart(function name));
threadConversion.Start(function parameter);
}
Если вы хотите последовательно читать файлы, почему бы не переместить все это в поток?
Thread threadConversion = new Thread(() => {
foreach (string f in Directory.GetFiles(txtPath.Text))
{
//read file f
}
});
threadConversion.Start();
Или еще лучше, используйте Задачи:
await Task.Run(() => {
foreach (string f in Directory.GetFiles(txtPath.Text))
{
//read file f
}
});
//do some other stuff
Вам просто не нужно запускать метод как поток. Просто запустите его так:
foreach (string f in Directory.GetFiles(txtPath.Text))
{
function(parameter);
}
Вы можете использовать метод Parallel.ForEach (вы должны хотя бы версия.net 4.0)
Например
Parallel.ForEach(Directory.GetFiles(txtPath.Text), f=>
{
//some code
}
);