Как я могу использовать обработчик событий .NET для возврата параметра в определенную переменную?

#c# #.net #serial-port #eventhandler

#c# #.net #последовательный порт #обработчик событий

Вопрос:

Я использую SerialDataReceivedEventHandler SerialPort класс для связи с устройством последовательного порта. Я отправляю код SCPI на устройство с помощью SerialPortObject.Write(command) команды where, которая имеет строковый тип. Затем устройство ответит строкой, которая собирается обработчиком событий и считывается в переменную с помощью SerialPortObject.ReadLine() .

Я отправляю различные команды на последовательный порт, например, для получения скорости или положения шагового двигателя и хочу сохранить их в string speed или string position соответственно. Однако обработчик событий может читать только строку, отправленную устройством, не зная, в какой переменной оно должно хранить данные. Решение состоит в том, чтобы вводить SerialPortObject.ReadLine() команду после каждой SerialPortObject.Write() команды, однако это приостанавливает поток, и Windows останавливается до тех пор, пока устройство не ответит, что иногда может быть длинным, в то время как обработчик событий будет делать это асинхронно.

 string position, speed;
SerialPortObject.DataReceived  = new SerialDataReceivedEventHandler(DataReceivedHandler);

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        var input = SerialPortObject.ReadLine();
    }
public void CurrentPosition()
    {
        //This requests for the current position (command is specific to the device)
        SerialPortObject.Write("?X");
    }
public void Speed()
    {
        //This requests for the current position (command is specific to the device)
        SerialPortObject.Write("?V");
    }
 

Мой вопрос
Как я могу SerialDataReceivedEventHandler распознать, какой из CurrentPosition() or Speed() вызвал событие, и поместить ответ устройства в position and speed соответственно.

Ответ №1:

Я думаю, вам следует сохранить состояние, какая команда была отправлена последней, например, с перечислением. Или отправляющая сторона должна добавить (если это возможно) запрошенный параметр.