Показать обработку в реальном времени

291
24 июля 2017, 12:14

Всем привет.

Есть массив, в котором ссылки на файлы, есть 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 не покажет, только последний. Как исправить?

Answer 1

Как верно подмечено в соседнем ответе, не хватает 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]));
    }
}
Answer 2
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]);
}
READ ALSO
Как сделать меню Hamburger в WPF

Как сделать меню Hamburger в WPF

Здравствуйте, можно ли сделать в WPF меню Hamburger? если можно то как? Проект с GitHub не знаю как правильно поставить, не получаетсяПодскажите, буду...

470
Выгрузка из assembly [требует правки]

Выгрузка из assembly [требует правки]

Подскажите как ВЫГРУЗИТЬ dll из assembly

209
Вынесение элемента управления

Вынесение элемента управления

Как вынести элемент управления WPF, например Grid, из основного xaml файла в отдельныйЗатем, как его подключить в основном xaml файле? Буду очень...

257
newtonsoft экранирует [требует правки]

newtonsoft экранирует [требует правки]

Здравствуйте, пробую сериализовать string в json, но при попытке выполнить сериализацию json возвращается с заэкранированными кавычками

257