Почему элементы управления WinForms / WPF не используют Invoke внутри?

Я понимаю, почему элементы управления GUI имеют сходство потоков.

Но почему элементы управления не используют внутренний вызов в своих методах и свойствах?

Теперь вам нужно проделать подобное, чтобы обновить значение TextBox :

this.Invoke(new MethodInvoker(delegate()
{
    textBox.Text = "newValue";
}

При использовании только textBox.Text = "newValue"; будет достаточно, чтобы представить то же самое логика.

Все, что нужно сделать, это изменить логику textBox.Text с этого (псевдокода):

public string Text
{
    set
    {
        if(!this.InvokeRequired)
            // do the change logic
        else
            throw new BadThreadException();
    }
}

На это:

public string Text
{
    set
    {
        if(!this.InvokeRequired)
            // do the change logic
        else
            this.Invoke(new MethodInvoker(delegate()
            {
                // do the change logic
            }
    }
}

То же самое касается геттеров и методов.

Я, конечно, не предлагаю удалять Invoke / BeginInvoke , я просто спрашиваю, почему элементы управления не работают необходимые потоки переключаются сами, а не генерируют исключение.

5
задан Matěj Zábský 9 February 2011 в 11:55
поделиться