Не могу понять, как это работает правильно. Я протестировал оборудование с другими программами, и он работает, но в этом коде периодически возникает проблема, при которой данные не возвращаются, поэтому время ожидания истекает. Я пробовал ReadExisting с синхронным и асинхронным, тот же результат. Это связано с ReadExisting и я должен использовать что-то еще?
private StringBuilder serialBuffer = new StringBuilder();
private const string terminationSequence = "\r";
private void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var data = Serial.ReadExisting();
serialBuffer.Append(data);
var bufferString = serialBuffer.ToString();
int index;
do
{
index = bufferString.IndexOf(terminationSequence, StringComparison.Ordinal);
if (index <= -1) continue;
IncomingData = bufferString.Substring(0, index);
bufferString = bufferString.Remove(0, index + terminationSequence.Length);
} while (index > -1);
serialBuffer = new StringBuilder(bufferString);
}
Я вставил несколько следов, и кажется, что событие не запускается ... Вот вывод и то, где событие не начинается до истечения времени ожидания.
- Стартовое событие
- Start do: bufferString - = 00
- Завершение события
- Стартовое событие
- Запустить do: bufferString - = 007BAA
- IncomingData = 007BAA
- Start do: bufferString -
- Завершение мероприятия
- Исключение: «System.TimeoutException» в GS.SkyWatcher.dll