Używanie MethodInvoker bez Invoke

Od jakiegoś czasu piszę aplikacje GUI i jedną rzeczą, z której zawsze korzystam, są funkcje MethodInvoker + lambda do wykonywania połączeń między wątkami.

Na przykładach zawsze widzę takie rzeczy:

Wersja 1

if (InvokeRequired)
{
    Invoke(new MethodInvoker(() => 
    {
        Label1.Text = "Foobar";
    });
}
else
{
    Label1.Text = "Foobar";
}

Prowadzi to jednak do duplikacji kodu -> poważnego problemu.

Więc co z tym jest nie tak?

Wersja 2

MethodInvoker updateText = new MethodInvoker(() => 
    {
        Label1.Text = "Foobar";
    });

if (InvokeRequired)
{
    Invoke(updateText);
}
else
{
    updateText();
}

Teraz mam funkcjonalność dołączoną do jednej zmiennej i wywołam ją za pomocą Invoke lub jako wskaźnik funkcji, gdy jest to konieczne. Czy wersja 2 jest gorsza pod względem wydajności? Czy może źle się do tego nadaję anonimowe funkcje?

questionAnswers(3)

yourAnswerToTheQuestion