WPF Лучшая точка для обновления индикатора выполнения из BackgroundWorker - PullRequest
7 голосов
/ 23 марта 2010

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

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

Ответы [ 3 ]

10 голосов
/ 23 марта 2010

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

0 голосов
/ 23 марта 2010

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

BackgroundWorker bw = new BackgroundWorker() { WorkerReportsProgress = true };
bw.ProgressChanged += ... ;
0 голосов
/ 23 марта 2010

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

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

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

worker.ReportProgress((i * 10));
...