Не могу разобраться с циклом внутри потока - 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);