|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Работа с потоками. Чтение из COM-порта |
|
.NET - Работа с потоками. Чтение из COM-порта
|
Ветеран Сообщения: 1384 |
Здравствуйте.
Пишу на C# программу, которая будет общаться с ком портом. Создал форму. Добавил в неё объект SerialPort. Программа открывает порт. Записывает в него данные. У порта есть событие DataReceived, которое как я понимаю наступает во время получения данных. Я хочу эти данные выводить на форму в RichTexBox (в коде rtb_log). Но в момент когда из порта должен прийти ответ возникает ошибка: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "rtb_log" не из того потока, в котором он был создан. Насколько я понимаю, все элементы формы созданы в одном потоке, а чтение из порта это другой поток. И мне нужно из одного потока работать с элементом созданным в другом потоке. Вы не могли бы мне как можно проще и нагляднее пояснить как можно решить данную проблему? На пальцах попытаться объяснить как в данном случае работать с потоками... private void btn_open_port_Click(object sender, EventArgs e) { try { serialPort.PortName = "COM" + tb_com.Text; serialPort.Open(); } catch (Exception error) { MessageBox.Show(error.Message); } } private void btn_write_Click(object sender, EventArgs e) { try { string s = tb_write.Text + "\r\n"; serialPort.WriteLine(s); rtb_log.AppendText(s); } catch (Exception err) { MessageBox.Show(err.Message); } } private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { byte[] b = new byte[128]; serialPort.Read(b, 0, b.Length); string s = Encoding.ASCII.GetString(b); } catch (Exception e3) { MessageBox.Show(e3.Message); } } |
|
------- Отправлено: 16:01, 16-02-2012 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:15, 16-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Tonny_Bennet, эта проблема была недавно описана в этом форуме. http://forum.oszone.net/thread-227336.html
|
------- Отправлено: 00:54, 17-02-2012 | #3 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать ferget, начал вчитываться... мне всё так же не понятна логика работы... пока не пойму логику не пойму что с чем завязать.
Поправьте меня если я не прав: Сначала я записываю в порт массив из байт. Затем обработчик событий serialPort_DataReceived срабатывает при приходе сообщения с порта. В теле обработчика я запускаю чтение того количества элементов массива, которые есть в буфере приёма serialPort.BytesToRead. Но когда в этом же обработчике я пытаюсь записать считанные байты в элемент формы мне вылетает ошибка: попытка доступа к элементу управления "rtb_log" не из того потока, в котором он был создан. Может мне нужно после прочтения сообщения создать событие: "Сообщение прочитано: текст сообщения" А для rtb_log сделать обработчик событий который будет ловить эти сообщение и выписывать в форму? Расскажите пожалуйста как это сделать правильно.... P.S. Язык MSDN не всегда понятен В примере Всё создаётся в консоли и наверное из-за этого не возникает ошибки связанной с потоками |
------- Отправлено: 16:19, 20-02-2012 | #4 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать |
|
------- Отправлено: 01:08, 21-02-2012 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Приложение с потоками. | Noglick | Программирование и базы данных | 1 | 19-04-2011 18:43 | |
Delphi - Работа С Потоками | LilLoco | Программирование и базы данных | 7 | 02-06-2010 22:12 | |
[решено] Чтение из COM порта | w3d1 | AutoIt | 5 | 18-09-2009 12:36 | |
чтение данных из COM-порта в лог | romez777 | Программирование в *nix | 0 | 28-11-2007 15:57 | |
Чтение IP адресов | Sanchos | Сетевые технологии | 6 | 25-05-2006 09:15 |
|