Warum ist für das Festlegen des Tastaturfokus aus dem Code dahinter Dispatcher.BeginInvoke erforderlich?

Ich habe einUserControl das enthält aTextBox. Wenn die Benutzersteuerung sichtbar wird, gebe ich dieTextBox Fokus. Könnte jemand erklären, warum ich das mit dem tun muss?Dispatcher?

public MyUserControl() 
{
    InitializeComponent();
    this.IsVisibleChanged += VisibilityChanged;
}

Fall 1 (funktioniert):

private void VisibilityChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (this.Visibility == Visibility.Visible)
    {
        this.Dispatcher.BeginInvoke((Action)delegate
        {
            Keyboard.Focus(this.InputTextBox);
        }, DispatcherPriority.Render);
    }
}

Fall 2 (funktioniert nicht):

private void VisibilityChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (this.Visibility == Visibility.Visible)
    {
        Keyboard.Focus(InputTextBox);
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage