Попробуйте добавить DoEvents () как раз перед # 3.
Из-за MessageBox вы позволяете приложению перекачивать все сообщения, поэтому с помощью DoEvents () вы перекачиваете сообщения.
Я создаю метод, аналогичный приложению Forms Application.DoEvents () перекачивать сообщения в WPF с помощью этого кода,
public static void DoEvents()
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
}
Его нельзя вызывать часто, но иногда это может помочь.