C# 如何从串行端口读取设备数据
我有一个设备在COM端口上发送数据,比如说在COM13上。现在我想读取这些数据并将其显示在RichTextBox或任何文本控件中 我已经在IO和IO.Ports的帮助下编写了应用程序,但comport.DataReceived事件不会触发,即使设备正在该端口上发送数据 我有一些软件,我在上面定义了端口号,它成功地显示了数据,这确保了数据在端口上接收,但我无法接收 有什么方法可以读取数据吗C# 如何从串行端口读取设备数据,c#,wpf,C#,Wpf,我有一个设备在COM端口上发送数据,比如说在COM13上。现在我想读取这些数据并将其显示在RichTextBox或任何文本控件中 我已经在IO和IO.Ports的帮助下编写了应用程序,但comport.DataReceived事件不会触发,即使设备正在该端口上发送数据 我有一些软件,我在上面定义了端口号,它成功地显示了数据,这确保了数据在端口上接收,但我无法接收 有什么方法可以读取数据吗 comm.Parity = cboParity.Text;//None comm.StopBits = cb
comm.Parity = cboParity.Text;//None
comm.StopBits = cboStop.Text;//One
comm.DataBits = cboData.Text;//8
comm.BaudRate = cboBaud.Text;//9600
comm.DisplayWindow = rtbDisplay;//Null
comm.PortName = "COM13";
comm.OpenPort();
cmdOpen.Enabled = false;
cmdClose.Enabled = true;
cmdSend.Enabled = true;
public bool OpenPort()
{
if (comPort.IsOpen)
{
comPort.Close();
}
comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
comPort.PortName = _portName;
comPort.Open();return true;
}
这通常来自串行端口的错误配置。仅仅打开一个串行端口并等待一些数据输入是不够的。您还必须将all设置为所需连接的正确值 一些常见的方法是
波特率
、数据比特
或奇偶校验
,但要真正确定这些方法都需要设置。甚至像RtsEnable
或ReadTimeout
这样的东西
您必须设置all,因为配置状态将从端口本身保存。因此,如果一个应用程序打开这样一个端口,对配置进行一些更改并将其关闭,那么打开该端口的下一个应用程序将从该配置开始,直到更改为止
更新
这似乎是一个我从这里看不到的问题
我能给你的唯一建议是使用,更好地了解你的其他应用程序的真正功能和上线的内容。此外,您还可以设置在一台机器上测试读写操作(即使在同一个应用程序中),以便更好地控制何时发送哪些数据。您是否阅读了DataReceived事件的文档 发件人: 不能保证为接收到的每个字节引发DataReceived事件。使用BytesToRead属性确定缓冲区中还有多少数据需要读取 当从SerialPort对象接收数据时,在辅助线程上引发DataReceived事件。由于此事件是在次线程而不是主线程上引发的,因此尝试修改主线程中的某些元素(如UI元素)可能引发线程异常。如果需要修改主窗体或控件中的元素,请使用Invoke将更改请求发回,这将在适当的线程上完成工作
您发布的代码片段相当粗糙,但我将ReceivedBytestThreshold属性设置为1。这确保在传入缓冲区中至少存在一个字节时触发事件。
干杯用于捕获工作软件,然后捕获您的软件;然后比较这些痕迹。特别注意所有配置参数,确保它们相同(如Oliver所述)。Aamir。。请您提供更多信息和一些可能的示例代码。检查问题现在我已经编辑了信息,我已经设置了所有属性。告诉我是否有任何缺陷?我所缺少的是,我无法接收事件:(