Мой вопрос касается события DataReceived
из System.IO.SerialPort
.У меня есть метод, который вызывается, когда это событие происходит.Я читаю Данные с myPort.ReadExisting
, обрабатываю и сохраняю их.Если я получаю определенный символ, данные до этого момента интерпретируются как команда, и запускается другое событие.
Мой вопрос: что произойдет, если я нахожусь в процессе обработки полученных данных, и приходят новые данные?Ожидают ли новые экземпляры метода завершения работы старого?В противном случае это может привести к конфликту, поскольку оба экземпляра этого метода используют одни и те же переменные.Я ошибаюсь в концепции обработки событий или есть элегантный способ справиться с этим.
Мой код работает нормально и мои результаты соответствуют ожиданиям, но моя обработка данных не настолько сложна.Я просто хочу понять эту проблему и избежать проблем в будущем.Мой пример кода будет таким:
private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = (SerialPort)sender;
int index = m_ports.FindIndex(p => p.PortName == port.PortName);
string tmpData;
m_currentData[index] += tmpData = port.ReadExisting();
Console.WriteLine(tmpData);
string currentData = m_currentData[index];
string currentOrder = "";
while (currentData.Contains(orderEndChar))
{
int endCharLocation = currentData.IndexOf(orderEndChar);
currentOrder = currentData.Substring(0, endCharLocation);
currentData = currentData.Substring(endCharLocation + 1);
orderEvent.gotOrder(currentOrder);
//orderEvent.gotOrder(new EventArgs());
}
m_currentData[index] = currentData;
}
Списки, потому что я хочу, чтобы он работал с несколькими портами, откуда я могу получать команды.