What I've read is nothing will be updated as long as the UI thread is busy. You've to do stuff or sleep/delay in another thread. Try updating your Label in a Task with App.Current.Dispatcher.Invoke(...). For example, have these in your MainWindow.xaml:
<Window ...>
<StackPanel>
<Label x:Name="label"/>
<Button Click="Button_Click" Content="Update"/>
<TextBlock x:Name="block"/>
</StackPanel>
</Window>
and in the Button_Click handler do these:
private void Button_Click(object sender, RoutedEventArgs e)
{
Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
App.Current.Dispatcher.Invoke(() =>
{
label.Content = "Updating " + i;
block.Text = "going to sleep";
});
Task.Delay(500).Wait();
App.Current.Dispatcher.Invoke(() =>
{
label.Content = "Updated " + i;
block.Text = "awaken";
});
Task.Delay(1000).Wait();
}
});
}