Обновление Label из цикла - C#
Формулировка задачи:
Есть цикл загрузки данных в методе downloadToClass:
Нужно после каждого добавленного в класс "файла" обновлять lTFile.Text (lTFile - Lebel), и задавать текст формата: "Файлов загружено: " + lMFile.Count
Проблема в том, что программа форма повисает пока идет цикл, а lebel обновится только после завершения цикла. Суть показать, что программа работает, а не зависла.
Попробовал создание потока, посредством BeginInvoke:
Эффект тот же...
P.S. До этого была идея вызвать другую форму, и в ней вывести progresbar, но форма даже не появлялась... (До сих пор стремлюсь к этому варианту, но думаю проблема не в вызове формы, а в том, что программа занята циклом...)
private void downloadToClass(List<string> Files) { MsForm _MSForm; if (lMFile.Count != 0) { _MSForm = new MsForm("Предупреждение!", "Добавить файлы или создать новый список?", "Добавить", "Новый", "Отмена"); _MSForm.ShowDialog(); if (_MSForm.DialogResult == DialogResult.No) Clear(); if (_MSForm.DialogResult == DialogResult.Cancel) return; } Files.Sort(new LogicalStringComparer()); if (Files.Count == 0) { _MSForm = new MsForm("Ошибка [151]", "Файлы не найдены!"); _MSForm.ShowDialog(); return; } if (lMFile.Count != 0) { foreach (string STR in Files) { bool b = true; foreach (mFiles buff in lMFile) //Проверка на повторную загрузку тех же данных { if (buff.News.Path == STR) { b = false; break; } } if (b) lMFile.Add(new mFiles(STR, lMFile.Count)); //lTFile.Text = "Файлов загружено: " + lMFile.Count; } } else { foreach (string STR in Files) { lMFile.Add(new mFiles(STR, lMFile.Count)); //lTFile.Text = "Файлов загружено: " + lMFile.Count; } } }
var action = new Action<List<string>>(downloadToClass); var result = action.BeginInvoke(Files, null, null); while (!result.IsCompleted) lTFile.Text = "Файлов загружено: " + lMFile.Count;
Решение задачи: «Обновление Label из цикла»
textual
Листинг программы
public void AlignForm(Point loc, Size size) { this.Left = loc.X + size.Width / 2 - this.Width / 2; this.Top = loc.Y + size.Height / 2 - this.Height / 2; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д