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

46
задан Mark Hurd 2 May 2012 в 07:28
поделиться