我已经痛苦地意识到需要在事件驱动的 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() 语法既低效又难以处理。
那么,有没有人想出捷径呢?