Я знаю, что при манипулировании элементами управления пользовательского интерфейса из любого потока, отличного от пользовательского интерфейса, вы должны маршалировать свои вызовы в поток пользовательского интерфейса, чтобы избежать проблем. По общему мнению, вы должны использовать тестовый InvokeRequired, а если он истинен, использовать .Invoke для выполнения маршалинга.
Это приводит к большому количеству кода, который выглядит следующим образом:
private void UpdateSummary(string text)
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => UpdateSummary(text)));
}
else
{
summary.Text = text;
}
}
Мой вопрос: могу ли я пропустить тест InvokeRequired и просто вызовите Invoke, например:
private void UpdateSummary(string text)
{
this.Invoke(new Action(() => summary.Text = text));
}
Есть проблемы с этим? Если да, есть ли лучший способ сохранить тест InvokeRequired, не копируя и вставляя этот шаблон повсюду?