На самом деле ваш пользовательский интерфейс заморожен во время выполнения длинного цикла, поэтому на экране ничего не может быть обновлено. Попробуйте это
private async void btn2_Click(object sender, RoutedEventArgs e)
{
for(int i = 0; i<=10000000; i++)
{
textBlock2.Text = i.ToString();
await Task.Delay(200); //stay 200 ms before showing next number so human eyes can see it.
}
}
При выполнении этой строки await Task.Delay(200);
цикл временно приостанавливается - на 200 миллисекунд, и поток пользовательского интерфейса теперь имеет возможность обрабатывать задачи рисования, ожидающие в очереди, что включает перерисовку текстового блока.