【发布时间】:2012-08-14 07:33:06
【问题描述】:
我正在编写 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 性能更差吗?或者我为此使用匿名函数是不好的做法?
【问题讨论】:
标签: c# user-interface multithreading lambda