У меня есть микроконтроллер, который отправляет пакеты данных с высокой скоростью передачи данных.Мне нужно прочитать и проанализировать эти данные, чтобы построить сюжет.Я использовал класс SerialPort и поток.Возникает проблема, которая иногда приводит к зависанию потока и потере некоторых пакетов.
Функция открытого порта:
private void OpenPortButton_Click(object sender, RoutedEventArgs e)
{
_port.Parity = (Parity)ParityChooserBox.SelectedItem;
_port.PortName = (string)PortChooserBox.SelectedItem;
_port.BaudRate = (int)BaudRateChooserBox.SelectedItem;
_port.DataBits = (int)DataBitsChooserBox.SelectedItem;
_port.StopBits = (StopBits)StopBitsChooserBox.SelectedItem;
try
{
_port.Open();
}
finally
{
}
_readThread = new Thread(ReadData);
_readThread.Start();
}
и функция чтения:
private void ReadData()
{
var Data = new List<int>();
while (true)
{
if (_stopThread)
break;
Data.Add(_port.ReadByte());
if (_readPacket && _currentPacketSize != 0)
{
_currentPacketSize--;
}
else if (_readPacket && _currentPacketSize == 0)
{
var delegateAnalyza = new AnalyzaDel(Analyze);
Dispatcher.Invoke(delegateAnalyza, Data);
_readPacket = false;
Data = new List<int>();
}
else
if (_readSize)
{
_readPacket = true;
_currentPacketSize = Data[Data.Count - 1];
_readSize = false;
}
else
if (Data.Count >= 3 && Data[Data.Count - 1] == Data[Data.Count - 2] && Data[Data.Count - 3] == Data[Data.Count - 1] &&
Data[Data.Count - 1] == 255)
{
_readSize = true;
}
}
}
Пакет начинается с 3 0xFFбайт.