Всем привет.
Есть массив, в котором ссылки на файлы, есть label и есть функция для обработки файлов. Мне нужно показать какой файл я сейчас обрабатываю в label.
Пример:
string[] arr = {"C:\\Windows\\wine.bat", "C:\\Windows\\lacky.bat", ...};
int i = 0;
while (i != arr.Lenght) {
label1.Text = arr[i];
FinInFile(arr[i]);
i++;
}
Проблема в том, что файл-то оно обработает, но в label не покажет, только последний. Как исправить?
Как верно подмечено в соседнем ответе, не хватает i++ в цикле while. И наверно цикл for лучше подойдет, но это все равно не поможет. Если обработка файлов происходит быстро, вывод в лабел названий файлов не имел бы смысла, по этому будем считать, что обработка занимает какое-то время. В таком случае, если обработка будет происходит в основном потоке, то окно формы зависнет и ничего обновляться не будет. По этому, обработку нужно производить асинхронно:
void FinInFile(string fileName)
{
System.Threading.Thread.Sleep(3000);//Имитируем обработку файла, который занимает 3 сек
}
private async void MyMethod()
{
string[] arr = { "C:\\Windows\\wine.bat", "C:\\Windows\\lacky.bat", "C:\\Windows\\lacky2.bat", "C:\\Windows\\lacky3.bat", "C:\\Windows\\lacky4.bat" };
for (int i = 0; i < arr.Length; i++)
{
label1.Text = arr[i];
await Task.Run(() => FinInFile(arr[i]));
}
}
string[] arr = {"C:\\Windows\\wine.bat", "C:\\Windows\\lacky.bat", ...};
int i = 0;
while (i != arr.Lenght) {
label1.Text = arr[i];
FinInFile(arr[i]);
}
Вы не где не прибавляете к i еденицу, для таких задачь лучше использовать for
for (int i = 0; i < arr.Lenght; i++)
{
label.Text = arr[i];
FinInFile(arr[i]);
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости