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?