private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { MessageBox.Show("1"); } private void serialPort1_ErrorReceived(object sender, System.IO.Ports.SerialErrorReceivedEventArgs e) { MessageBox.Show("2"); } private void serialPort1_PinChanged(object sender, System.IO.Ports.SerialPinChangedEventArgs e) { MessageBox.Show("3"); } private void Form1_Load(object sender, EventArgs e) { serialPort1.Open(); }
代码就是这么简单,设置是对的,超级终端可以接收数据,但是程序里面不触发接收数据事件。
这样接受数据? 怀疑 SerialPort 都没申明 怎么接受? 不知道你是不是用的这个我发个代码你吧 以前做的:
首先你open 那些我就不发了。
SerialPort spt = new SerialPort(); Thread acceptThread;//接收数据的线程
/// <summary> /// 线程启动allyn2011-11-1 /// </summary> public void StarThread() { Thread.Sleep(1000); acceptThread = new Thread(spt_DataReceived); acceptThread.Start(); }
/// <summary> /// 线程委托方法 /// </summary> private void spt_DataReceived() { try { Thread.Sleep(1000); int receiveLen = spt.BytesToRead; byte[] ReceiveData = new byte[receiveLen]; for (int i = 0; i < receiveLen; i++) { ReceiveData[i] = (byte)spt.ReadByte(); } byte[] dataSub = new byte[1024]; SplitByte(dataSub, ReceiveData); } catch (Exception ex) { ex.GetBaseException(); } }
/// <summary> /// 接收数据处理 /// </summary> /// <param name="dataSub"></param> /// <param name="ReceiveData"></param> public void SplitByte(byte[] dataSub, byte[] ReceiveData) { //这里就是对你接受的处理处理到了 }
或者用这个接受也可以spt.ReadLine()
呵呵,其实你仔细看就知道我是直接拉的控件了,最后解决了,是要添加一个DtrEnable就可以了,原因是因为“在开发中有些串口设备需要串口供电”。
@清海扬波: 呵呵 我做的没有用控件!