使用SerialPort的DataReceived事件问题
定义一个类封装SERIALPORT的操作(名称: RWMsgOperate,实例化为rwo):
public delegate void DataReceivedEventHandler(DataReceivedEventArgs e);
public event DataReceivedEventHandler DataReceived;
/// <summary>串口初始化
///
/// </summary>
/// <param name="portname">串口名称</param>
/// <param name="rate">波特率</param>
public RWMsgOperate(string portname, int rate)
{
sPort.PortName = portname;
sPort.BaudRate = rate;
//sPort.Parity = parity;
sPort.DtrEnable = true;
sPort.NewLine = "\r\n";
sPort.ReadTimeout = readTimeOut;
sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived);
sPort.ErrorReceived += new SerialErrorReceivedEventHandler(sPort_ErrorReceived);
}
private void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)//处理监听事件
{
Thread.Sleep(5000);
while (sPort.BytesToRead > 0)
{
int bufferSize = sPort.ReadBufferSize;
byte[] readBuffer = new byte[bufferSize + 1];
int count = sPort.Read(readBuffer, 0, bufferSize);
for (int i = 0; i < count; i++)
{
byteData.Add(readBuffer[i]);
}
}
receiveString += System.Text.Encoding.Default.GetString(byteData.ToArray(), 0, byteData.Count);
//temp = receiveString;
//Thread.Sleep(1000);
if (DataReceived != null)
{
DataReceived(new DataReceivedEventArgs(receiveString));
}
public void Write(string atOrder) //发送at指令并读取返回数据并将解码后数据返回
{
if (!sPort.IsOpen)
{
sPort.Open();
comState = true;
}
//sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived);
sPort.Write(atOrder);
}
----------------------------------
在winform中调用类
private void startListing_Click(object sender, EventArgs e)
{
rwo.Write("AT+CMGL=4\r\n");//rwo为
if (this.richTextBox_com4.Text.ToString() == "")
{
this.richTextBox_com4.Text = ">>开始监听COM4……\r";
}
int CNcount = rwo.PduToCn.Count;
MessageBox.Show(CNcount.ToString()+"\r"+"内容:"+rwo.receiveString )
for (int i = 0; i < CNcount; i++)
{
this.richTextBox_com4.AppendText(rwo.PduToCn[i]);
}
}
问题是:receiveString 为空。
这里没办法发附件,哪位大神帮解决下。我可以发工程文件过去。
public delegate void DataReceivedEventHandler(DataReceivedEventArgs e);
public event DataReceivedEventHandler DataReceived;
/// <summary>串口初始化
///
/// </summary>
/// <param name="portname">串口名称</param>
/// <param name="rate">波特率</param>
public RWMsgOperate(string portname, int rate)
{
sPort.PortName = portname;
sPort.BaudRate = rate;
//sPort.Parity = parity;
sPort.DtrEnable = true;
sPort.NewLine = "\r\n";
sPort.ReadTimeout = readTimeOut;
sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived);
sPort.ErrorReceived += new SerialErrorReceivedEventHandler(sPort_ErrorReceived);
}
private void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)//处理监听事件
{
Thread.Sleep(5000);
while (sPort.BytesToRead > 0)
{
int bufferSize = sPort.ReadBufferSize;
byte[] readBuffer = new byte[bufferSize + 1];
int count = sPort.Read(readBuffer, 0, bufferSize);
for (int i = 0; i < count; i++)
{
byteData.Add(readBuffer[i]);
}
}
receiveString += System.Text.Encoding.Default.GetString(byteData.ToArray(), 0, byteData.Count);
//temp = receiveString;
//Thread.Sleep(1000);
if (DataReceived != null)
{
DataReceived(new DataReceivedEventArgs(receiveString));
}
public void Write(string atOrder) //发送at指令并读取返回数据并将解码后数据返回
{
if (!sPort.IsOpen)
{
sPort.Open();
comState = true;
}
//sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived);
sPort.Write(atOrder);
}
----------------------------------
在winform中调用类
private void startListing_Click(object sender, EventArgs e)
{
rwo.Write("AT+CMGL=4\r\n");//rwo为
if (this.richTextBox_com4.Text.ToString() == "")
{
this.richTextBox_com4.Text = ">>开始监听COM4……\r";
}
int CNcount = rwo.PduToCn.Count;
MessageBox.Show(CNcount.ToString()+"\r"+"内容:"+rwo.receiveString )
for (int i = 0; i < CNcount; i++)
{
this.richTextBox_com4.AppendText(rwo.PduToCn[i]);
}
}
问题是:receiveString 为空。
这里没办法发附件,哪位大神帮解决下。我可以发工程文件过去。
...全文
相关推荐
VB .net SerialPort控件使用详解
VB2008中使用SerialPort控件详解,从接收到发送。估计你看了就会用这个了,其实VB2008很简单哦~
c# serialport sample(1)
http://blog.csdn.net/wuyazhe/archive/2010/05/17/5598945.aspx 博客文章的配套代码。希望能帮助到你。
vb2008串口编程应用实例,SerialPort控件应用
vb2008串口编程应用实例,SerialPort控件应用,详解SerialPort的应用方法,简单的接口以及消息收发程序,接收程序。
ComEvent_First1.rar_datareceived
基于VisualBasic2005.net开发的串品通信程序,DataReceived事件测试。
C# 串口接收数据中serialPort.close()死锁的实例
下面小编就为大家分享一篇C# 串口接收数据中serialPort.close()死锁的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


