Cleaning up Code übersät mit InvokeRequired

Ich weiß, dass Sie beim Manipulieren von UI-Steuerelementen aus einem Nicht-UI-Thread Ihre Aufrufe an den UI-Thread marshallen müssen, um Probleme zu vermeiden. Es besteht allgemeiner Konsens darüber, dass Sie test InvokeRequired verwenden sollten und, wenn dies zutrifft, .Invoke, um das Marshalling durchzuführen.

Dies führt zu viel Code, der so aussieht:

private void UpdateSummary(string text)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new Action(() => UpdateSummary(text)));
    }
    else
    {
        summary.Text = text;
    }
}

Meine Frage lautet: Kann ich den InvokeRequired-Test auslassen und Invoke einfach wie folgt aufrufen:

private void UpdateSummary(string text)
{
    this.Invoke(new Action(() => summary.Text = text));
}

Gibt es ein Problem damit? Wenn ja, gibt es eine bessere Möglichkeit, den InvokeRequired-Test beizubehalten, ohne dieses Muster überall kopieren und einfügen zu müssen?

Antworten auf die Frage(16)

Ihre Antwort auf die Frage