gpt4 book ai didi

c# - 使用 DataReceived 事件从串行端口读取

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:17 24 4
gpt4 key购买 nike

我有一个 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 事件却不起作用?

谢谢,保罗H


编辑:进一步的测试表明此代码适用于某些设备,但不适用于其他设备。 DataReceived 事件需要什么才能正常工作?

进一步的挫败感:在此设备上,ReadExisting 总是返回 null 而 BytesToRead 总是返回 0。不过,ReadLine()Read() 都工作得很好。

最佳答案

不要在数据接收处理程序中放置阻塞读取。如果处理程序触发并且没有整行 line 可供读取,它将阻塞。在您发布的代码中没有任何类型的阅读。

来自 MSDN:“PinChanged、DataReceived 和 ErrorReceived 事件可能会被乱序调用,并且在底层流报告错误和执行事件处理程序之间可能会有轻微的延迟。只有一个事件处理程序可以一次执行。"

关于c# - 使用 DataReceived 事件从串行端口读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com