C#串口编程时,读取数据必须在,串口响应事件中进行吗 25
//AddEventHandlermSerialPort.DataReceived+=newSerialDataReceivedEventHandler(SerialPo...
// Add Event Handler
mSerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
也就是说要在SerialPort_DataReceived()这个函数被触发时读..
我是按照我自己想法,根据自己设计的握手通信,当我发送出去一个东西后,我主动的去读
serialPort_jmt.Write(glb_retuMcuCmd,0,2);
serialPort_jmt.Read(glb_readMcuCmd, 0, 2);
但是这样好像经常使程序卡主,我是想这个read(),是不是一直在循环等待的?
还有c#等面向对象编程是不是不能使用死循环的,这样也会使程序卡主?
在线等...... 展开
mSerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
也就是说要在SerialPort_DataReceived()这个函数被触发时读..
我是按照我自己想法,根据自己设计的握手通信,当我发送出去一个东西后,我主动的去读
serialPort_jmt.Write(glb_retuMcuCmd,0,2);
serialPort_jmt.Read(glb_readMcuCmd, 0, 2);
但是这样好像经常使程序卡主,我是想这个read(),是不是一直在循环等待的?
还有c#等面向对象编程是不是不能使用死循环的,这样也会使程序卡主?
在线等...... 展开
1个回答
展开全部
SerialPort_DataReceived()事件是.net提供好的很完善的实时接收串口响应的方法. 正常情况用它就可以了.
mSerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived); 这行代码执行后就意味着程序已经另开一线程了.它不会影响主进程的操作,也就是说不会卡死主程序.
当你不开线程直接serialPort_jmt.Read的时候如果没有串口响应来的数据那么该方法会一直等待,也就是说回卡住主程序.
这不是死循环,而是主线程等待.
如果不用SerialPort_DataReceived()事件,可以自己写线程,用线程去serialPort_jmt.Read,这样就让线程一直等待,而不会卡死主程序.
有帮助请采纳,如有疑问请追问.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询