【发布时间】:2012-12-24 10:10:27
【问题描述】:
我有这个通用函数来调用 WinForm 控件:
public static void Invoke(this Control c, Action action)
{
if (c.InvokeRequired)
c.TopLevelControl.Invoke(action);
else
action();
}
我正在考虑通过引入更严格的约束来防止无意义的事情变得更好,可能是这样的:
button1.Invoke(() => list.Add(1));
也可能有多余的输入,例如:
button1.Invoke(() => button1.Hide());
因为我们已经指定this 是button1。
所以我做到了:
public static void Invoke<T>(this T c, Action<T> action) where T : Control
{
if (c.InvokeRequired)
c.TopLevelControl.Invoke(action);
else
action(c);
}
现在我得打电话了,
button1.Invoke((c) => c.Hide());
或
button1.Invoke((c) => button1.Hide());
现在我觉得即使这样也有一些超出要求的输入。如果我指定this 是button1,那么在lambda 表达式中我不想再次指定一个虚拟变量c 来告诉在哪里进行操作。无论如何我可以再次缩短这个吗?也许喜欢
button1.Invoke(Hide);
或
button1.Hide.Invoke();
在 C# 中还是这样?
【问题讨论】:
标签: c# c#-4.0 lambda type-inference method-invocation