У меня есть приложение Visual Studio 2008 C # .net 2.0 CF, которое читает данные через последовательный порт, используя класс System.IO.Ports.SerialPort
. К сожалению, SerialDataReceivedEventHandler
никогда не вызывается.
Я открываю порт так:
private SerialPort serial_port_;
protected void OpenSerialPort(string port, int baud)
{
if (serial_port_ == null)
{
serial_port_ = new SerialPort(port,
baud,
Parity.None,
8,
StopBits.One);
}
else
{
serial_port_.BaudRate = baud;
serial_port_.PortName = port;
}
if (!serial_port_.IsOpen)
{
serial_port_.Open();
serial_port_.DataReceived += new SerialDataReceivedEventHandler(OnSerialDataReceived);
}
}
private void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs args)
{
Debug.WriteLine("Serial data received");
}
Если, однако, я добавлю Debug.WriteLine(serial_port_.ReadLine());
сразу после открытия порта, я вижу в окне вывода строку текста с порта, как я и ожидал.
Итак, почему ReadLine
работает, а событие DataReceived
- нет?
Спасибо,
PaulH
Редактировать: Дальнейшее тестирование показывает, что этот код работает на некоторых устройствах, но не на других. Что для правильной работы события DataReceived
?
Дальнейшее разочарование: На этом устройстве ReadExisting
всегда возвращает ноль, а BytesToRead
всегда возвращает 0.
ReadLine()
и Read()
отлично работают, хотя.