我正在编写 GUI 应用程序有一段时间了,我一直使用的一件事是 MethodInvoker + lambda 函数来进行跨线程访问。
从我发现的例子中,我总是看到这样的东西:
版本 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();
}
现在,我将功能捆绑在一个变量中,并在适当时使用 Invoke 或作为函数指针调用它。版本 2 性能更差吗?或者我为此使用匿名函数是不好的做法?