Dlaczego ustawianie fokusu klawiatury za kodem wymaga Dispatcher.BeginInvoke?

mamUserControl który zawiera aTextBox. Kiedy kontrola użytkownika staje się widoczna, podajęTextBox skupiać. Czy ktoś mógłby wyjaśnić, dlaczego muszę to zrobić za pomocąDispatcher?

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

Przypadek 1 (działa):

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

Przypadek 2 (nie działa):

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

questionAnswers(3)

yourAnswerToTheQuestion