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