【问题标题】: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,我预计不会出现异常。

【问题讨论】:

    标签: c# multithreading combobox invoke


    【解决方案1】:

    你错过了else

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 2021-08-19
      相关资源
      最近更新 更多