Если я правильно понимаю, изменение любого элемента управления в WPF (например, текста метки) ставит в очередь обновление в Dispatcher. Диспетчер ожидает завершения моего кода и, когда у него есть время, обрабатывает всю очередь.
Для этого звоните
double current = 0;
ReportProgress (0d, "ProcessingStarted");
foreach (var item in collection)
{
item.Process(); //takes about 10s
current++;
ReportProgress (current / (double)collection.Count, "Processing item No. " + current.ToString () + " finished");
}
ReportProgress (1d, "Finished");
, где ReportProgress вызывает событие с этим обработчиком события
private void handlerProgressMade (object sender, ProgressEventArgs e)
{
pbProgress.Value = pbProgress.Maximum * e.Percent;
lbProgressMessage.Content = e.Message;
}
заканчивается полным индикатором выполнения и выводится сообщение «Готово», но промежуточные шаги не отображаются.
Мне известно, что это можно сделать, вызвав функцию в другом потоке и асинхронно обновив интерфейс (и это произойдет в какой-то момент), но на данный момент добавление потоков кажется ненужным осложнением.
Как заставить Диспетчер немедленно обновлять и перерисовывать?