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