Очистка кода, заваленного InvokeRequired
Я знаю, что при манипулировании элементами управления пользовательского интерфейса из любого потока, не являющегося пользовательским интерфейсом, вы должны перенаправлять свои вызовы в поток пользовательского интерфейса, чтобы избежать проблем. Общее согласие заключается в том, что вы должны использовать тест 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, не копируя и не вставляя этот шаблон повсюду?