Я понимаю, почему элементы управления 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
, я просто спрашиваю, почему элементы управления не работают необходимые потоки переключаются сами, а не генерируют исключение.