Обработка исключения InvalidOperationException (Windows Forms, C#)

210
21 апреля 2017, 17:42

Вот стал вроде как простой вопрос. Необходимо в windows forms получить изображение из видео потока. Изображение должно выводиться не полноразмерным, а только его выбранная часть, каждый раз его координаты могут изменяться. Для этого я на panel бросил pictureBox, в panel включил автоскрол, на pictureBox включил autosize. При запуске программы и загрузке изображения в pictureBox выдаёт сообщение:

Необработанное пользовательское исключение System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления panel1 не из того потока, в котором он был создан."

Такая же ситуация происходит и при работе с обычным изображением, загружаешь и опять то же сообщение.

Как обработать это исключение, чтобы не выбивало постоянно это сообщение? Если это проще простого делается - извините, в программировании ещё зелен, а некоторые задачи уже нужно решать.

Answer 1

Вызов элемента управления из каких-либо других потоков, за исключением потока, в котором был создан элемент управления, без использования метода Invoke является нарушением безопасности.

При изменении элемента управления из другого потока (не владельца контрола) кидается InvalidOperationException.

Помещая код внутрь Control.Invoke(Delegate) вы сразу выполняете его в потоке, создавшем Control. А помещая внутрь Control.BeginInvoke(Delegate) код выполняется выполняется ассинхронно, т.е. вы не тратите время на ожидание окончания отработки кода.

this.BeginInvoke(new Action(() => MessageBox.Show("Это тест")));

Как видите, я даже вывод обычного диалога вставил в виде BeginInvoke, т.к. даже такой невинный вызов может вызвать InvalidOperationException, если его выполнять не в основном потоке GUI.

READ ALSO
Как установить ms office на Azure Cloud Services?

Как установить ms office на Azure Cloud Services?

Я пишу сайт на которое пользователи загружают ms word документы, а сайт редактирует документы с помощью COMПоэтому мне нужно чтобы на сервере...

190
Получить данные из ответа на GET запрос

Получить данные из ответа на GET запрос

привет есть кодЯ отправляю запрос и в ответ получаю файл

187
Определить четное ли число

Определить четное ли число

Даны числа: 21,23,25,27,29

295