Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Потокобезопасность vs COM-порт в Visual C++


Автор: Курсант 24.7.2015, 09:53
Всем доброго времени суток.
Пишу программу, которая должна общаться по COM-порту с устройством. Добавил в программу элемент serialPort, открыл - всё нормально. Но при подключении к компьютеру устройства программа завершается с ошибкой "Попытка доступа к элементу textBox1 не из того потока, в котором он был создан". Обработчик получения данных для serialPort1 следующий:
Код

private: System::Void serialPort1_DataReceived ( трампампам...
{
   textBox1->AddText ( serialPort1->ReadLine () );
}


Всё, что мне удалось нагуглить - это то, что проблема в так называемой потокобезопасности. Но все примеры решения, которые я нашёл, написаны для С#. Вопрос - как мне добавлять данные из serialPort1 в textBox1.

Автор: Amp 24.7.2015, 17:14
Правильно, доступ к GUI элементам возможен только из GUI-потока. Проблема решается в зависимости от библиотеки, например с помощью посылки сообщения или вызова метода из другого потока через специальный хэндлер/диспетчер. Судя по коду, это C++/CLR, значит смотреть надо в сторону Dispatcher.Invoke.

Автор: Курсант 28.7.2015, 08:42
Спасибо, разобрался. Хорошо разобран вопрос вот здесь: https://msdn.microsoft.com/ru-ru/library/zyzhdc6b(v=vs.110).aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)