我正在尝试修改 WinForms 应用程序上的组合框,但出现了一些奇怪的行为。我正在尝试两种方法:
这是我需要调用的方法:
private void modifyCombo(ClassInfoHolder oldClass, ClassInfoHolder newClass) {
this.monitoredComboBox.Items[monitoredComboBox.Items.IndexOf(oldClass)] = newClass;
}
我正在尝试两种不同的方法来从 GUI 线程调用此方法。这个有效:
delegate void modifyComboCollection(ClassInfoHolder oldClass, ClassInfoHolder newClass);
private void modifySecondTabComboBox(ClassInfoHolder oldClass, ClassInfoHolder newClass) {
if (monitoredComboBox.InvokeRequired) {
modifyComboCollection m = new modifyComboCollection(modifyCombo);
this.BeginInvoke(m, oldClass, newClass);
} else {
// no need for Invoke
modifyCombo(oldClass, newClass);
}
}
这会引发 TargetInvocationException:
this.BeginInvoke(new Action(() => {
modifyCombo(oldClass, newClass);
}));
我更喜欢使用第二个,因为它更清晰,但我不完全确定为什么当第一个示例运行良好时它会引发错误。第一个示例调用该modifyCombo
方法并正确返回IndexOf
对象的。第二个例子是-1
从IndexOf
.
编辑:这是堆栈跟踪的 pastebin 链接。 http://pastebin.com/TwfUDw4u