各位大神,我先描述下我的问题。
在一个自己编写的类(CCeSerialPort)中实例化了SerialPort,其他的串口配置什么的都操作了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.IO.Ports;
namespace test
{
public class CCeSerialPort
{
// private long received_count = 0; //接收计数
//private long send_count = 0; //发送计数
//串口通信需要使用的资源
private List<Byte> buffer = new List<byte>(1024);
public byte[] binary_data_buffer = null;
public SerialPort comport1 = new SerialPort();
//设备编号,实例化该类时必须给该属性初始化
public String deviceNumber;
//public event DataReceivedEventHandler DataReceived;
public CCeSerialPort()
{
RS232ComportInit();
comport1.DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);
}
//串口1的初始化
public void RS232ComportInit()
{
comport1.BaudRate = 9600;
comport1.DataBits = 8;
//comport1.StopBits = 0;
comport1.Parity = System.IO.Ports.Parity.None;
comport1.PortName = "COM1";
//读写超时
comport1.ReadTimeout = 500;
comport1.WriteTimeout = 500;
}
public void comport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// 具体内容就不说了。
}
}
}
然后在需要使用的窗体中对CCeSerialPort进行实例化。
问题来了:
单步执行过程中,我能监测到comport1.DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);语句正确执行,但是comport_DataReceived方法一直不能执行。
另外,发送数据是很流程的。
整体来说就是接收不到数据,但是发送数据正常。
一共就40分,全部奉上,谢谢大家。
------解决思路----------------------
没见到comport1.Open
------解决思路----------------------
public CCeSerialPort()
{
RS232ComportInit();
comport1.DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived); //.
//this.comport1.DataReceived += new SerialDataReceivedEventHandler(comport1_DataReceived);
}
void comport1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//throw new NotImplementedException();
}
try
{
comport1.Open();
}
catch (Exception ex)
{
comport1 = new SerialPort(); 这里你重新new后没有对事件进行绑定呀
System.Windows.Forms.MessageBox.Show(ex.Message);
}
而你的事件是在构构函数里实现绑定的。。。
------解决思路----------------------
同意8楼的说法,另外你在调用
comport1.DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);
的时候,没有看到对应的
comport1.DataReceived -= new SerialDataReceivedEventHandler(comport_DataReceived);
操作,是不需要吗?同样的我只看到了RS232ComportInit方法,是不是有必要再增加一个RS232ComportDispose方法呢?
------解决思路----------------------
是否真的有数据返回?看你这是上位机的通信程序。有能监控串口通信的软件。
------解决思路----------------------
先用程序发送数据,然后用串口调试助手接受数据看下数据是否有返回。针对8楼说的情况单步调试一下看下是否会跑到catch (Exception ex)里去!