c#串口通信,DataReceive事件不能触发。

使用串口调试工具Hterm调试,通信没有问题。确认波特率,数据位,port,校验位,停止位都没有问题。看网上设置特别属性设置
comPort.RtsEnable = true
comPort.DtrEnable=true
comport.ReceivedBytesThreshold = 1;
但是还不是有回传。
但发现一个现象,如果用串口工具连接发送一次数据后。使用程序连接,报错,port口被占用,不退程序,然后断掉串口工具连接,回到我写的程序连接,第一次下指令,可以触发一次DataRecieve事件,第二次下指令就不可以了。然后程序断开连接,再次连接,下指令均不可触发DataRecieve事件。好郁闷,求赐教。是哪里出了问题?

vs c# 在加载wpf主界面时注册个DataRecieve事件,定义了该serialport为静态变量。

从描述上看可能有4个地方
1.ReceivedBytesThreshold
https://docs.microsoft.com/zh-cn/dotnet/api/system.io.ports.serialport.receivedbytesthreshold?view=dotnet-plat-ext-6.0
这个属性管控触发字节数量,默认是1,假设你设置的比较大,那么接收不够数量的情况他会缓存下来,并不会触发

2.你代码发送的指令有误,大多数硬件并不会无端发送数据。他得接收正确指令后才会处理,有些硬件如果收到错误指令会返回错误指令,但更多的硬件是直接忽略错误指令根本不返回任何数据

3.握手Handshake
https://docs.microsoft.com/zh-cn/dotnet/api/system.io.ports.serialport.handshake?view=dotnet-plat-ext-6.0
目前大多数硬件已经不再实现握手标准了,但是不排除少量硬件依然延用以前的握手标准
4就是波特率这类设置,如果设置不对。你发送数据,对方认为无效,也会不理会你