为啥即使使用了调用,组合框也会抛出异常

Posted

技术标签:

【中文标题】为啥即使使用了调用,组合框也会抛出异常【英文标题】:Why is combobox throwing exception even though invoke is used为什么即使使用了调用,组合框也会抛出异常 【发布时间】:2019-11-02 00:13:28 【问题描述】:

我正在尝试从另一个线程设置组合框的选定项,但软件抛出异常并显示消息“跨线程操作无效。控制 xxx 从创建它的线程以外的线程访问”

如果 InvokeRequired 在 ComboBox 上为真,我已经尝试使用 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】:

你错过了else

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

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

【讨论】:

以上是关于为啥即使使用了调用,组合框也会抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的数组列表即使在初始化后也会抛出空指针异常?

即使元素存在,Selenium find_element 也会抛出异常

为啥即使配置文件设置为分发,xcode 也会抛出此错误?

为啥即使元素存在,硒也会抛出未找到元素的错误? [复制]

为啥geoip会抛出异常?

为啥这个 Linq 方法会抛出空引用异常