Обновление Label из цикла - C#

Узнай цену своей работы

Формулировка задачи:

Есть цикл загрузки данных в методе downloadToClass:
        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;
                }
            }
        }
Нужно после каждого добавленного в класс "файла" обновлять lTFile.Text (lTFile - Lebel), и задавать текст формата: "Файлов загружено: " + lMFile.Count Проблема в том, что программа форма повисает пока идет цикл, а lebel обновится только после завершения цикла. Суть показать, что программа работает, а не зависла. Попробовал создание потока, посредством BeginInvoke:
            var action = new Action<List<string>>(downloadToClass);
            var result = action.BeginInvoke(Files, null, null);
            while (!result.IsCompleted) lTFile.Text = "Файлов загружено: " + lMFile.Count;
Эффект тот же... P.S. До этого была идея вызвать другую форму, и в ней вывести progresbar, но форма даже не появлялась... (До сих пор стремлюсь к этому варианту, но думаю проблема не в вызове формы, а в том, что программа занята циклом...)

Решение задачи: «Обновление 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;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы