为什么即使使用了调用,组合框也会引发异常

时间:2019-06-19 09:35:44

标签: c# multithreading combobox invoke

我正在尝试从另一个线程设置组合框的选定项,但是软件引发异常,并显示消息“跨线程操作无效。从创建该线程的线程以外的其他线程访问控件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,我不希望出现异常。

1 个答案:

答案 0 :(得分:1)

您错过了else

public void setSelectedItem( object item ) {
    if ( comboBox.InvokeRequired )
        comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
    else
        comboBox.SelectedItem = item;
}

否则,即使需要“调用”,也可以直接更新控件。