Чтобы добавить то, что говорит Марк, есть два способа решения проблемы. Взломать путь и правильный путь.
Правильный способ - использовать многопоточность, например, BackgroundWorker. Вы, вероятно, в конечном итоге будете использовать control.BeginInvoke для обработки обновления потока графического интерфейса.
Способ взлома - вызвать Application.DoEvents в вашем цикле. Я называю это хаком, потому что он работает только частично. Например, если вы делаете узкий цикл, который содержит много маленьких быстрых инструкций, тогда он будет работать нормально. Если вы выполняете цикл, в котором ваши инструкции занимают некоторое время, это не сработает (например, при выполнении огромного SQL-запроса к базе данных).
Здесь - хорошая ссылка, чтобы узнать об этом конкретном примере. Я думаю, что WPF работает немного иначе, чем обычные WinForms.