我写了一段关于serialport类读取串口数据的小程序,但是有个问题很是不明白;例如下面代码:
private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
bool = true;
int i = 0;
MessageBox.Show("进入sport_DataReceived事件!");
if (sender.GetType() != typeof(System.IO.Ports.SerialPort))
{
return;
}
string strReceive = string.Empty;
string strCollect = string.Empty; string strBack = string.Empty; byte[] buffer = new byte[2];
System.IO.Ports.SerialPort comPort = (System.IO.Ports.SerialPort)sender; try
{
sport.ReceivedBytesThreshold = sport.ReadBufferSize; while ()
{
sport.Read(buffer, 0, buffer.Length); if (buffer != null)
{
for (i = 0; i <= 1; i++)
{
strReceive = buffer[i].ToString("X2");
MessageBox.Show(strReceive);
if (i == 1)
{
= false;
strReceive = strReceive + strBack;
}
else
{
strBack = strReceive;
}
}
}
//else { MessageBox.Show("没进去"); }
}
strReceive = strReceive.Replace("\0", string.Empty);
strReceive = strReceive.Replace("\r\n", string.Empty);
strReceive = strReceive.Replace("\r", string.Empty);
strReceive = strReceive.Replace("\n", string.Empty); strCollect = Convert.ToString( Convert.ToDouble(Convert.ToInt32(strReceive, 16)) / 100 ); MessageBox.Show("接收到的数据为2: " + strCollect);
this.Invoke(updateText, strCollect); strCollect = string.Empty;
strReceive = string.Empty;
buffer = null;
sport.DiscardInBuffer();
MessageBox.Show("事件执行完成了!");
}当事件被激发时,运行正常;按常规来讲程序弹出 MessageBox.Show("事件执行完成了!");后,此事件应该结束,但是实际运行的时候,弹出("事件执行完成了!")后;程序由弹出MessageBox.Show("进入sport_DataReceived事件!");就是说事件被触发一次,但是却执行了两次内部代码!不知是何原因??
private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
bool = true;
int i = 0;
MessageBox.Show("进入sport_DataReceived事件!");
if (sender.GetType() != typeof(System.IO.Ports.SerialPort))
{
return;
}
string strReceive = string.Empty;
string strCollect = string.Empty; string strBack = string.Empty; byte[] buffer = new byte[2];
System.IO.Ports.SerialPort comPort = (System.IO.Ports.SerialPort)sender; try
{
sport.ReceivedBytesThreshold = sport.ReadBufferSize; while ()
{
sport.Read(buffer, 0, buffer.Length); if (buffer != null)
{
for (i = 0; i <= 1; i++)
{
strReceive = buffer[i].ToString("X2");
MessageBox.Show(strReceive);
if (i == 1)
{
= false;
strReceive = strReceive + strBack;
}
else
{
strBack = strReceive;
}
}
}
//else { MessageBox.Show("没进去"); }
}
strReceive = strReceive.Replace("\0", string.Empty);
strReceive = strReceive.Replace("\r\n", string.Empty);
strReceive = strReceive.Replace("\r", string.Empty);
strReceive = strReceive.Replace("\n", string.Empty); strCollect = Convert.ToString( Convert.ToDouble(Convert.ToInt32(strReceive, 16)) / 100 ); MessageBox.Show("接收到的数据为2: " + strCollect);
this.Invoke(updateText, strCollect); strCollect = string.Empty;
strReceive = string.Empty;
buffer = null;
sport.DiscardInBuffer();
MessageBox.Show("事件执行完成了!");
}当事件被激发时,运行正常;按常规来讲程序弹出 MessageBox.Show("事件执行完成了!");后,此事件应该结束,但是实际运行的时候,弹出("事件执行完成了!")后;程序由弹出MessageBox.Show("进入sport_DataReceived事件!");就是说事件被触发一次,但是却执行了两次内部代码!不知是何原因??
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货