私はしばらくの間GUIアプリケーションを書いていますが、私がいつも使用しているのは、クロススレッドアクセスを行うためのMethodInvoker+ラムダ関数です。
私が見つけた例から、私はいつもこのようなものを見ます:
バージョン1
if (InvokeRequired)
{
Invoke(new MethodInvoker(() =>
{
Label1.Text = "Foobar";
});
}
else
{
Label1.Text = "Foobar";
}
しかし、これはコードの重複につながります->私にとって大きな悪者です。
では、これの何が問題になっていますか?
バージョン2
MethodInvoker updateText = new MethodInvoker(() =>
{
Label1.Text = "Foobar";
});
if (InvokeRequired)
{
Invoke(updateText);
}
else
{
updateText();
}
これで、機能が1つの変数にバンドルされ、Invokeを使用して呼び出すか、必要に応じて関数ポインターとして呼び出します。バージョン2はパフォーマンスの面で劣っていますか?または、これに無名関数を使用するのは悪い習慣ですか?