为什么即使使用了 invoke 组合框也会抛出异常
Why is combobox throwing exception even though invoke is used
我正在尝试从另一个线程设置组合框的选定项目,但软件抛出异常并显示消息 "Cross-thread operation not valid. Control xxx accessed from a thread other than the thread it was created"
如果 ComboBox 上的 InvokeRequired 为真,我已经尝试使用 MethodInvoker,但我仍然遇到异常。
public class ComboBoxAdapter
{
System.Windows.Forms.ComboBox comboBox;
//...
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
comboBox.SelectedItem = item;
}
}
如果我像在我的代码中那样访问 ComboBox,我预计不会出现异常。
你错过了一个else
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
else
comboBox.SelectedItem = item;
}
否则,即使需要调用,您也可以直接更新控件。
我正在尝试从另一个线程设置组合框的选定项目,但软件抛出异常并显示消息 "Cross-thread operation not valid. Control xxx accessed from a thread other than the thread it was created"
如果 ComboBox 上的 InvokeRequired 为真,我已经尝试使用 MethodInvoker,但我仍然遇到异常。
public class ComboBoxAdapter
{
System.Windows.Forms.ComboBox comboBox;
//...
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
comboBox.SelectedItem = item;
}
}
如果我像在我的代码中那样访问 ComboBox,我预计不会出现异常。
你错过了一个else
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
else
comboBox.SelectedItem = item;
}
否则,即使需要调用,您也可以直接更新控件。