WPF Лучше всего указывают для обновления индикатора выполнения от BackgroundWorker

У меня есть задача, которая занимает много времени для выполнения. Для информирования пользователя прогресса у меня есть индикатор выполнения, который я обновляю внутри DoWork.

Кто-либо может сказать мне, если это - лучший способ обновить индикатор выполнения? Я услышал, что существует a ReportProgress обработчик событий, но я смущен, потому что я не уверен в цели ReportProgress.

7
задан Necreaux 9 June 2015 в 14:33
поделиться

3 ответа

Событие ProgressChanged - это то, что вы ищете. Однако убедитесь, что вы создали BackgroundWorker, как показано ниже, чтобы он действительно вызывал это событие при вызове ReportProgress.

BackgroundWorker bw = new BackgroundWorker() { WorkerReportsProgress = true };
bw.ProgressChanged += ... ;
0
ответ дан 7 December 2019 в 01:19
поделиться

Поскольку фоновый воркер работает в отдельном потоке, вы столкнетесь с проблемами, если попытаетесь получить доступ к объектам пользовательского интерфейса. Вызов метода ReportProgress для рабочего из обработчика DoWork вызывает событие ProgressChanged. Это событие должно обрабатываться в потоке пользовательского интерфейса, чтобы можно было легко получить доступ к элементу управления.

        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += DoWorkHandler;
        worker.WorkerReportsProgress = true;
        worker.ProgressChanged += (s, e) => 
            { myProgressBar.Value = e.ProgressPercentage; };

        worker.RunWorkerAsync();

...

    public void DoWorkHandler(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        while (working)
        {
            // Do Stuff

            worker.ReportProgress(progressPercentage);
        }
    }
10
ответ дан 7 December 2019 в 01:19
поделиться

ReportProgress - это то, что вы использовали бы для обновления хода выполнения вашей задачи, включая такие вещи, как пользовательский интерфейс - в вашем случае - индикатор выполнения.

Вам следует ознакомиться с документацией MSDN, расположенной здесь .

в основном вы создаете обработчик для события ReportProgress, затем в DoWorkEventHandler вызываете ReportProgress следующим образом:

worker.ReportProgress((i * 10));
0
ответ дан 7 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: