Вот стал вроде как простой вопрос.
Необходимо в windows forms получить изображение из видео потока. Изображение должно выводиться не полноразмерным, а только его выбранная часть, каждый раз его координаты могут изменяться. Для этого я на panel бросил pictureBox, в panel включил автоскрол, на pictureBox включил autosize. При запуске программы и загрузке изображения в pictureBox выдаёт сообщение:
Необработанное пользовательское исключение
System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления panel1 не из того потока, в котором он был создан."
Такая же ситуация происходит и при работе с обычным изображением, загружаешь и опять то же сообщение.
Как обработать это исключение, чтобы не выбивало постоянно это сообщение? Если это проще простого делается - извините, в программировании ещё зелен, а некоторые задачи уже нужно решать.
Вызов элемента управления из каких-либо других потоков, за исключением потока, в котором был создан элемент управления, без использования метода Invoke является нарушением безопасности.
При изменении элемента управления из другого потока (не владельца контрола) кидается InvalidOperationException.
Помещая код внутрь Control.Invoke(Delegate) вы сразу выполняете его в потоке, создавшем Control. А помещая внутрь Control.BeginInvoke(Delegate) код выполняется выполняется ассинхронно, т.е. вы не тратите время на ожидание окончания отработки кода.
this.BeginInvoke(new Action(() => MessageBox.Show("Это тест")));
Как видите, я даже вывод обычного диалога вставил в виде BeginInvoke, т.к. даже такой невинный вызов может вызвать InvalidOperationException, если его выполнять не в основном потоке GUI.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости