Не могу разобраться с циклом внутри потока - C#
Формулировка задачи:
Здравствуйте.
У меня в программе есть SQL скрипт ,который выполняется весьма продолжительное время. Чтобы не было ощущения, что программа зависла я решил прикрутить ПрогрессБар. Сам же скрипт создаёт в папке файлы, число которых всегда равно количеству БД. Поэтому максимальное значение ПрогрессБара равно количеству БД, а его Валуе увеличивается каждый раз как в папке появляется новый файл. В потоке я организовал по сути бесконечный цикл, который всё время проверяет количество файлов в папке. Но почему-то этот цикл срабатывает только два раза, при первом запуске и после завершения скрипта. Почему так?
Собственно, сам код:
P.S. Вообще у меня есть чувство, что пишу я полную &^%$#. Если это так, то наставьте на путь истинный
//Максимум прогресс бара равен количеству баз данных. progressBar1.Maximum = names.Count; //запуск потока в котором будет проверяться количество файлов в папке BWCountFile.RunWorkerAsync(new object[] { path }); SqlCommand sqlCmd = new SqlCommand(); sqlCmd.Connection = Globals.SQLConnection; sqlCmd.CommandText = /*Тут большой и страшный скрипт, который выполняется весьма продолжительное время*/ sqlCmd.Prepare(); sqlCmd.ExecuteNonQuery(); BWCountFile.CancelAsync(); MessageBox.Show("Завершено"); } private void BWCountFile_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { Debug.WriteLine("Поток запущен"); object[] ar = e.Argument as object[]; string pathToCatalog = (string)ar[0]; int progressbarvalue = 0; int fileCount = 0; int fileCountOld = 0; while (true) { Debug.WriteLine("Выполняется цикл"); //Вот эта надпись возникает всего два раза. if (BWCountFile.CancellationPending == true) return; fileCount = new DirectoryInfo(pathToCatalog).GetFiles().Length; if (fileCount > fileCountOld) { progressbarvalue++; fileCountOld++; } Action<int> action = ProgressBarvalue; if (InvokeRequired) { Invoke(action, progressbarvalue); } else { action(progressbarvalue); } } } private void ProgressBarvalue(int progressbarvalue) { progressBar1.Value = progressbarvalue; }
Решение задачи: «Не могу разобраться с циклом внутри потока»
textual
Листинг программы
BWCountFile.ReportProgress(progressbarvalue);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д