Можно ещё использовать метод Application.DoEvents. Но он больше подходит для случаев когда в нагруженном цикле идет обновление GUI (например вывод текущего статуса, выполненный прогресс) и это обновление не происходит.
while(true){
...
label1.Text = $"Current progress is {progress}";
// Processes all Windows messages currently in the message queue.
Application.DoEvents();
}