Индикатор выполнения BackgroundWorker не обновляется при выполнении некоторых задач. То, чего я хотел бы достичь, - это перемещение индикатора выполнения во время итерации каждого файла в DirectoryInfo. Предположим, у нас есть 20 файлов «.sql», в то время как первый файл заполнен, он должен быть 5%, 10% и т. Д.
Вот мой код.
private void CSV_Click(object sender, RoutedEventArgs e)
{
try
{
btnExtract.IsEnabled = false;
workerextract.RunWorkerAsync();
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}
private void workerextract_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
try
{
this.Dispatcher.Invoke(() =>
{
DirectoryInfo di = new DirectoryInfo(txtQueryfolder.Text);
files = di.GetFiles("*.sql").Count();
currentfile = 0;
foreach (FileInfo fi in di.GetFiles("*.sql"))
{
// Open the text file using a stream reader.
using (StreamReader sr = new StreamReader(fi.FullName))
{
// Read the stream to a string, and write the string to the console.
string line = sr.ReadToEnd();
//System.Windows.MessageBox.Show(line);
ExtractToCSV(line, System.IO.Path.GetFileNameWithoutExtension(fi.Name));
currentfile++;
}
int percentage = (currentfile + 1) * 100 / files;
workerextract.ReportProgress(percentage);
}
});
}
catch(Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}
private void workerextract_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBarExtract.Value = e.ProgressPercentage;
}
private void workerextract_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
btnExtract.IsEnabled = true;
System.Windows.MessageBox.Show("CSV Data extraction finished!");
}
Я обнаружил, что
private void workerextract_ProgressChanged (отправитель объекта,
System.ComponentModel.ProgressChangedEventArgs e)
вызывается один раз в конце, когда 100%.
Также
private void workerextract_RunWorkerCompleted (отправитель объекта,
RunWorkerCompletedEventArgs e)
никогда не звонил, так как я не вижу окно сообщения в конце.
Итак, я думаю, что я делаю что-то не так, не могли бы вы указать мне правильный путь?