我已经痛苦地意识到,在事件驱动的GUI代码中,人们需要多么频繁地编写以下代码模式
private void DoGUISwitch() {
// cruisin for a bruisin' through exception city
object1.Visible = true;
object2.Visible = false;
}
就变成:
private void DoGUISwitch() {
if (object1.InvokeRequired) {
object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); }));
} else {
object1.Visible = true;
object2.Visible = false;
}
}
这在c#中是一种尴尬的模式,无论是记忆还是输入。有没有人想出某种捷径或构造来在一定程度上自动化这个?如果有一种方法可以将函数附加到对象上,而无需执行所有这些额外的工作,就像object1.InvokeIfNecessary.visible = true
类型的快捷方式一样,那就太酷了。
以前的答案讨论了每次只调用Invoke()的不可行性,即使这样,Invoke()语法也是低效的,而且仍然难以处理。
有人找到什么捷径了吗?