Цель:
Попытка записать строку в последовательный порт, прочитать ее, а затем распечатать на консоли
Код:
// for waiting until event is detected
private static ManualResetEvent waitHandle = new ManualResetEvent(false);
public Driver()
{
// create new serial port
comPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
// add event handler
comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
// configure port
comPort.DtrEnable = true;
comPort.RtsEnable = true;
comPort.ReadTimeout = 3000;
// open port
comPort.Open();
// send string through port
string command = "test \n";
byte[] MyMessage = System.Text.Encoding.UTF8.GetBytes(command);
comPort.Write(MyMessage, 0, MyMessage.Length);
// wait until event is detected
waitHandle.WaitOne();
}
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Write data to buffer and stop wait
Console.WriteLine(comPort.ReadExisting());
waitHandle.Set();
}
Проблема:
Кажется, что запись в последовательный порт работает нормально ( подтверждено с помощью монитора последовательного порта ), но «comPort_DataReceived» никогда не вызывается
Если я изменю свой код и добавлю
while(true)
{
Console.WriteLine(comPort.ReadExisting());
}
Сразу после «comPort.Write (MyMessage, 0, MyMessage.Length);» так что я опрашиваю, а не жду обработчик события, тогда ничего не пишется
Если я попытаюсь опросить таким образом
while (true)
{
Byte[] buf = new Byte[2048];
comPort.Read(buf, 0, 2048);
Console.WriteLine(buf.ToString());
}
Время ожидания истекло (System.TimeoutException: «Время ожидания истекло».
).
Я не уверен, где я иду не так / почему я не могу читать с последовательного порта