Почему комбобокс выдает исключение, даже если используется invoke - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь установить выбранный элемент комбинированного списка из другого потока, но программа выдает исключение с сообщением «Операция с несколькими потоками недопустима. Элемент управления xxx доступен из потока, отличного от потока, в котором он был создан»

Я уже пытался использовать MethodInvoker, если для ComboBox установлено значение InvokeRequired, но я все еще получаю исключение.

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 Ответ

1 голос
/ 19 июня 2019

Вы пропускаете else

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

в противном случае вы напрямую обновляете элемент управления, даже если требуется Invoke.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...