Как получить правильное значение из SerialPort.BytesToRead?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как получить правильное значение из SerialPort.BytesToRead?

Сообщение Anonymous »

Иногда значение SerialPort.BytesToRead равно 0 в тот момент, когда я проверяю, содержит ли он данные, но когда мое приложение несколькими строками позже достигает точки останова, я вижу, что оно содержит определенное количество байтов. p>

Например:

Я записываю некоторые данные в последовательный порт. Затем я вызываю метод для чтения ответа:

Код: Выделить всё

var bytes = new List();
var byteCount = _serialPortWrapper.BytesToRead; // the value 0 is stored in byteCount

while (_serialPortWrapper.BytesToRead > 0) // this is 0, so it doesn't go in here
{
try
{
bytes.Add(_serialPortWrapper.ReadByte());
}
catch (TimeoutException)
{
return null;
}
}

MyPacket packet; // I set a breakpoint here and I can see that data is available
if (MyPacket.TryParse(bytes.ToArray(), out packet))
{
return packet;
}

return null;
Когда я устанавливаю точку останова в пакете ProprietaryPacket; Я вижу, что данные доступны. Фактически, в этот момент, если я перетащу курсор до bytes.Add(_serialPortWrapper.ReadByte()); и позволю ему запуститься снова, все ожидаемые данные будут заполнены в байтах и ProprietaryPacket. Тогда TryParse будет работать.

Как я могу сделать так, чтобы BytesToRead в первый раз возвращал правильное значение, а затем ReadByte( ) будет работать?

edit Обратите внимание: если я добавлю Thread.Sleep(500); перед любым из вышеперечисленных запусков он работает каждый раз. Однако я не хочу этого делать, потому что это своего рода хак. Есть ли способ обойти это?

Подробнее здесь: https://stackoverflow.com/questions/980 ... ytestoread
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Работает ли кроссплатформенная библиотека System.IO.Ports.SerialPort на Android с чипами FTDI UART? (например, FT232R)?
    Anonymous » » в форуме Android
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • SerialPort.DataReceived Событие и потокобезопасность
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • SerialPort.DataReceived Событие и потокобезопасность
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как я могу избежать утечки ниток с чтением Serialport в C#?
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Проблема с подключением Serialport: «Запрашиваемый ресурс используется» после отключения кабеля [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»