问题描述
privatevoidserialPort_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse){if(sp.DsrHolding==false&&serialPort1.CtsHolding==true){Touch=true;}else{if(Touch){Touch=false;MessageBox.Show("ssssss");}}}SerialPortsp=newSerialPort();privatevoidForm2_Load(objectsender,EventArgse){sp.Open();sp.DtrEnable=true;sp.RtsEnable=true;sp.ReceivedBytesThreshold=1;}privatevoidtimer1_Tick(objectsender,EventArgse){sp.DataReceived+=newSerialDataReceivedEventHandler(serialPort_DataReceived);}怎么触发不了DataReceived事件。
解决方案
解决方案二:
没有串口初始化的条件波特率什么的如果不满足触发的条件也不会触发的
解决方案三:
我就是用C#自带的控件也没有办法触发DataReceived的事件
解决方案四:
没弄过,帮顶下
解决方案五:
privatevoidForm2_Load(objectsender,EventArgse){sp.Open();sp.DtrEnable=true;sp.RtsEnable=true;sp.ReceivedBytesThreshold=1;}privatevoidtimer1_Tick(objectsender,EventArgse){sp.DataReceived+=newSerialDataReceivedEventHandler(serialPort_DataReceived);}红色部分不是很好。这样会告成局部内存泄漏。最好把它放到Form的构造函数中去。
解决方案六:
该回复于2010-08-04 06:38:49被版主删除
解决方案七:
DataReceived方法是不是只有有信息传输过来的时候才能执行?我用一个类似鼠标的一个脚踏开关来控制的怎么就是执行不到DataReceived这个方法呢?
解决方案八:
楼主的写法有问题,定时器那部分。然后还有你com口的初始化没有定义,不知道对不对
解决方案九:
放在timer里头干啥要定时触发么放在一个死循环里头看看我以前放timer也不触发我也不知道咋回事最后放在死循环里面就可以了波特率串口名都要指定阀值达不到你这里是一字节别人不给你发数据也是不会触发的
解决方案十:
首先建议你在初始化的时候就添加委托事件。sp.DataReceived+=newSerialDataReceivedEventHandler(serialPort_DataReceived);再者无需时间控件来读取。最后记得设置事件触发前的缓冲区字节数。
解决方案十一:
将SerialPort的属性值RtsEnable设置为true
解决方案十二:
我在wince5.0应用程序开发过程遇到类似问题,后来就这样解决啦。
解决方案十三:
privatevoidForm2_Load(objectsender,EventArgse){sp.Open();sp.DtrEnable=true;sp.RtsEnable=true;sp.ReceivedBytesThreshold=1;sp.DataReceived+=newSerialDataReceivedEventHandler(serialPort_DataReceived);sp.Open()}
解决方案十四:
关键在于需要设置ReceivedBytesThreshold属性,一般为1
解决方案十五:
看看波特率和端口设置的对不对。不要把接收事件的订阅写在TIMER中,