SerialPort_DataReceived()事件是.net提供好的很完善的实时接收串口响应的方法. 正常情况用它就可以了.
mSerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived); 这行代码执行后就意味着程序已经另开一线程了.它不会影响主进程的操作,也就是说不会卡死主程序.
当你不开线程直接serialPort_jmt.Read的时候如果没有串口响应来的数据那么该方法会一直等待,也就是说回卡住主程序.
这不是死循环,而是主线程等待.
如果不用SerialPort_DataReceived()事件,可以自己写线程,用线程去serialPort_jmt.Read,这样就让线程一直等待,而不会卡死主程序.
有帮助请采纳,如有疑问请追问.