Как правильно реализовать BackgroundWorker для информирования пользователя о том, что задача выполняется - PullRequest
0 голосов
/ 24 июня 2019

Проблема Я использовал проект из https://github.com/zaagan/BioMetrix и хочу использовать BackgroundWorker для отображения последовательности выполнения длинных задач (например: получение данных журнала занимает около 30 секунд)

Что я сделал до сих пор 1- Добавлен backgroundWorker1 из Toolbox 2 - После InitializeComponent () я добавил:

 backgroundWorker1.WorkerReportsProgress = true;
 backgroundWorker1.WorkerSupportsCancellation = true;

3 - Добавлены эти функции:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        for (int i = 1; i <= 10; i++)
        {
            if (worker.CancellationPending == true)
            {
                e.Cancel = true;
                break;
            }
            else
            {

                System.Threading.Thread.Sleep(500);
                worker.ReportProgress(i * 10);
            }
        }
    }

private void backgroundWorker1_ProgressChanged(object sender, 
 ProgressChangedEventArgs e)
    {
        this.Text = (e.ProgressPercentage.ToString() + "%");
    }


private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Cancelled == true)
        {
            this.Text = "Canceled!";
        }
        else if (e.Error != null)
        {
            this.Text = "Error: " + e.Error.Message;
        }
        else
        {
            this.Text = "Done!";
        }
    }

Я ожидал увидеть процент прогрессии по основному тексту заголовка подписи при получении данных журнала с устройства.

1 Ответ

0 голосов
/ 24 июня 2019

Вам необходимо назначить обработчик события для события

worker.DoWork += backgroundWorker_ProgressChanged;

Если вы создали форму Windows, вам нужно просмотреть страницу событий в свойствах Background Worker и найти событие DoWork, а затем назначить его.функция для запуска.

...