我正在尝试从另一个线程设置组合框的选定项,但是软件引发异常,并显示消息“跨线程操作无效。从创建该线程的线程以外的其他线程访问控件xxx” < / p>
如果ComboBox上的InvokeRequired为true,我已经尝试使用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,我不希望出现异常。
答案 0 :(得分:1)
您错过了else
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
else
comboBox.SelectedItem = item;
}
否则,即使需要“调用”,也可以直接更新控件。