Не могу разобраться с циклом внутри потока - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д