Я создаю фона рабочего в первый раз. Он работает в основном с запуском кода, и моя кнопка остановки/отмены работает. Тем не менее, я также пытаюсь сообщить о прогрессе, чтобы обновить индикатор выполнения, но я не могу полностью его запустить.
Я запускаю код с одного нажатия кнопки, который запускает этот код:
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();//this invokes the DoWork event 
Мой метод Do_Work:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            int j = 0;// Count cumulative imported files
            int countDupFiles = 0;// Count number of previously imported csv files
            int countImportedFiles = 0;// Count imported files
            foreach (string folderPath in csvDirList)
            {
                string[] csvFileNames = Directory.GetFiles(@folderPath, "*.csv");
                frmImportCsvData.replaceAll(csvFileNames, folderPath + "\\", "");
                for (int i = 0; i < csvFileNames.Length; i++, j++)
                {
                    string csvFilePath = folderPath + "\\" + csvFileNames[i];
                    if ((worker.CancellationPending == true))
                    {
                        e.Cancel = true;
                        break;
                    }
                    else
                    {
                        if (dataLayer.ImportCsvDataBkgrnd(this, csvFilePath, compIdValue, csvFileCount, i))//new method processes subdirectories if tick box selected
                        {
                            countImportedFiles = countImportedFiles + 1;
                        }
                        else
                        {
                            countDupFiles = countDupFiles + 1;
                        }
                        System.Threading.Thread.Sleep(500);
                    }
                    worker.ReportProgress(j);//tried using worker and backgroundWorker1 but neither works
                    backgroundWorker1.ReportProgress(j);
                    //string proj = j.ToString();
                    //MessageBox.Show(proj);//Displays incrementing j as expected when not commented out
                }
            }
            if (countImportedFiles > 0)
                MessageBox.Show(countImportedFiles + " files were imported.");
            if (countDupFiles > 0)
                MessageBox.Show(countDupFiles + " files were not imported. Matches all ready in Database.");
        }
Попытка запустить любой из этих событий ProgressChanged:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    string tbProgress = (e.ProgressPercentage.ToString() + "%");
    MessageBox.Show(tbProgress + "backgroundWorker1");
    importProgressBar(e.ProgressPercentage);
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    string tbProgress = (e.ProgressPercentage.ToString() + "%");
    MessageBox.Show(tbProgress + "worker");
    importProgressBar(e.ProgressPercentage);
}
Наконец, я хочу, чтобы событие ProgressChanged вызывало этот метод для обновления моего индикатора выполнения:
public void importProgressBar(int i)
{
    progressTableLayoutPanel.Visible = true;//display progress bar
    int percProgress = 100 * (i + 1) / csvFileCount;
    if (percProgress <= 99)// Required to prevent values above 100 that crash the code
        progressBar.Value = percProgress + 1;//hack that makes the progress bar update when progress value decreases
    progressBar.Value = percProgress;
    percProgressLabel.Text = percProgress.ToString();
    progressTableLayoutPanel.Update();//Required to display all progress bar table contents
    //Thread.Sleep(200);
    if (percProgress >= 100)
    {
        Thread.Sleep(200);
        progressTableLayoutPanel.Visible = false;
    }
}
Код кнопки отмены, который работает, выглядит следующим образом:
private void stopImportButton_Click(object sender, EventArgs e)
        {
             backgroundWorker1.CancelAsync();
        }
Ящики сообщений в моих событиях ProgressChanged никогда не отображаются, и мой индикатор выполнения никогда не устанавливается в видимый. Любые идеи, что может быть проблемой?
