Когда следует решить прочитать следующий символ в StreamReader с устройства с последовательным портом, чтобы избежать получения ошибки Timeour (C #) - PullRequest
1 голос
/ 16 августа 2011

Я отправляю команду сброса соединения на устройство через последовательный порт.И в ответ на это я иногда (большую часть времени) получаю односимвольный ответ.Поэтому я использую Reader. Прочитайте комментарий после написания первой команды, используя streamwriter.Но иногда наше устройство не отправляет ответ на этот первый запрос.Это не имеет значения для меня, потому что я не использую ответ в моем программном обеспечении.Я просто продолжу посылать следующие команды на устройство.Когда устройство не отправляет ответ, мой читатель. Читающий вызов получает исключение тайм-аута, и я не могу продолжать связь с устройством.Так как я не знаю, когда устройство ответит на запрос или нет, что я могу сделать?Я либо не могу прочитать первый ответ.Но в этом случае один символ портит следующие сообщения, которые устройство отправит мне.Это будет в начале сообщения.Если я использую reader.read, я могу получить исключение таймаута.Я пытался

if (reader.Peek() >= 0)
   reader.Read();

Но это мне не помогло.В этот раз метод Peek () может получить исключение тайм-аута.Как я узнаю, есть ли для меня персонаж, или мне придется пропустить чтение и продолжить писать следующую команду?

Спасибо за ваши ответы, Ферда Оздемир

Ответы [ 2 ]

0 голосов
/ 16 августа 2011

Если у вас есть метод, который отвечает на событие SerialPort.DataReceived, вы можете попробовать что-то вроде этого:

while (port.BytesToRead > 0)
{
    reader.Read(); //Or reader.ReadLine(); 
}

Дополнительная информация о событии DataReceived: MSDN для DataReceived

0 голосов
/ 16 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...