我有这个通用函数来调用 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
is 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
is button1
,那么在 lambda 表达式中我不想c
再次指定一个虚拟变量来告诉在哪里进行操作。无论如何我可以再次缩短这个时间吗?也许喜欢
button1.Invoke(Hide);
或者
button1.Hide.Invoke();
或者在 C# 中?