Проблема с SerialPort
Хочу научиться работать с СОМ - портом в Студии.
Подключил к порту модем через дата кабель.
Кинул на форму SerialPort...... при запуске делаю SerialPort1.Open();
Потом в обработчике Click кнопки написал SerialPort1.Write("AT"+(char)13+(char)10);
Модем заведомо работает нормально и эхоответ выключен ........ проблема в том что событие DataRecieved вызывается сразу после того как я отправил данные в порт.
ТОЕСТЬ Я ЧИТАЮ ТОЖЕ САМОЕ ЧТО ОТПРАВЛЯЮ???
Непонятно почему........... в MSDN написано, что я записываю в выходной буфер а почему тогда в обработчике методом Read читается из выходного буфера строка ="AT"+(char)13+(char)10+"OK"+(char)13+(char)10.
Вопрос: как сделать что бы читался только ответ модема (ОК+13+10)???
В чем грабли?
Для того чтобы прочитать данные, используй свойство BytesToRead, которое показывает сколько байт надо прочитать. Потом с помощью метода Read читай именно это количество
Пример 1. Модем отключен.
Пишу в порт методом Write(), например, строку "ATD 1020"+(char)13+(char)10 (изначально свойство ByteToRead == 0 - входной буфер пуст). После записи ByteToRead равняется 10, и всеми методами чтения, например, ReadExisting() мне возвращает тоже самое "ATD 1020"+(char)13+(char)10.
Событие DataRecieved генерируется (непонятно почему - модем то отключен и ничего ответить не может).
Пример 2. Модем подключен.
Пишу ту же команду...
ReadExisting() дает строку = моя команда + ответ модема: "ATD 1020"+(char)13+(char)10+"NO CARRIER"+(char)13+(char)10. Событие генерируется (резонно - модем то подключен и ответил о отсутсвии несущей).
Вопросище, почему методами Read(), BaseStream.Read(), ReadExisting() читается моя команда звонка перед фактическим ответом от модема?!!! Почему генерируется DataRecieved в первом случае!!!
Как сделать так что бы читалась пустая строка в первом случае и "NO CARRIER"+(char)13+(char)10 - во втором?
Остается лишь вариант вырезать после n-символьной команды первых n- байт ответа. Но это же криво как-то!!!
To 3A3-968M!!! Знаю я это свойство.... проблема не в этом. Оно у меня увеличивается после Write() до ответа модемом на команду на N, где N - длинна записываемой в порт строки.
Всеравно, спасибо вам за ответ!!!