Очистка кода, заваленного 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, не копируя и не вставляя этот шаблон повсюду?

Ответы на вопрос(8)

Ваш ответ на вопрос