Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从串行端口读取设备数据_C#_Wpf - Fatal编程技术网

C# 如何从串行端口读取设备数据

C# 如何从串行端口读取设备数据,c#,wpf,C#,Wpf,我有一个设备在COM端口上发送数据,比如说在COM13上。现在我想读取这些数据并将其显示在RichTextBox或任何文本控件中 我已经在IO和IO.Ports的帮助下编写了应用程序,但comport.DataReceived事件不会触发,即使设备正在该端口上发送数据 我有一些软件,我在上面定义了端口号,它成功地显示了数据,这确保了数据在端口上接收,但我无法接收 有什么方法可以读取数据吗 comm.Parity = cboParity.Text;//None comm.StopBits = cb

我有一个设备在COM端口上发送数据,比如说在COM13上。现在我想读取这些数据并将其显示在RichTextBox或任何文本控件中

我已经在IO和IO.Ports的帮助下编写了应用程序,但comport.DataReceived事件不会触发,即使设备正在该端口上发送数据

我有一些软件,我在上面定义了端口号,它成功地显示了数据,这确保了数据在端口上接收,但我无法接收

有什么方法可以读取数据吗

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。。请您提供更多信息和一些可能的示例代码。检查问题现在我已经编辑了信息,我已经设置了所有属性。告诉我是否有任何缺陷?我所缺少的是,我无法接收事件:(