WinForms アプリケーションでコンボ ボックスを変更しようとしていますが、奇妙な動作が発生します。私は2つの方法を試しています:
呼び出す必要があるメソッドは次のとおりです。
private void modifyCombo(ClassInfoHolder oldClass, ClassInfoHolder newClass) {
this.monitoredComboBox.Items[monitoredComboBox.Items.IndexOf(oldClass)] = newClass;
}
GUI スレッドからこのメソッドを呼び出す 2 つの異なる方法を試しています。これは機能します:
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);
}));
2 番目の例の方がはるかに明確なので、使用したいと思いますが、最初の例が問題なく動作するのに、なぜエラーがスローされるのか完全にはわかりません。最初の例では、modifyCombo
メソッドを呼び出して、オブジェクトの を正しく返しIndexOf
ます。2 番目の例は-1
から返されIndexOf
ます。
編集:これはスタックトレースのペーストビンリンクです。 http://pastebin.com/TwfUDw4u