int length = SpCom.BytesToRead;
上面这句应该是获取接收缓冲区中数据的字节数的大小的,
我在接收到数据后明明SpCom.BytesToRead里面的数是85或者是其他大于14的某个数(打断点后鼠标停留在BytesToRead上),但执行这一句后只要SpCom.BytesToRead里的数大于14,length 里最大只能为14,这是为什么? uint i = 0;
string text = "";
int length = SpCom.BytesToRead;
byte[] RevData = new byte[length];此句打断点后鼠标停留在BytesToRead上,length 里最大只能为14
上面这句应该是获取接收缓冲区中数据的字节数的大小的,
我在接收到数据后明明SpCom.BytesToRead里面的数是85或者是其他大于14的某个数(打断点后鼠标停留在BytesToRead上),但执行这一句后只要SpCom.BytesToRead里的数大于14,length 里最大只能为14,这是为什么? uint i = 0;
string text = "";
int length = SpCom.BytesToRead;
byte[] RevData = new byte[length];此句打断点后鼠标停留在BytesToRead上,length 里最大只能为14
//******************************************************************
//SpCom_DataReceived
//功能:接收MCU传来的数据,并在接收文本框中显示
//******************************************************************
private void SpCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string text = "";
int length = SpCom.BytesToRead;
byte[ ] RevData = new byte[ length ];
SpCom.Read(RevData, 0, length);//读串口接收缓冲区中的数据到RevData中
if ( hex接收 . Checked )
{
text = byteToHexStr ( RevData );
}
else
{
text = System.Text.Encoding.Default.GetString ( RevData );
}
UpdateReceiveTextBox(text);//在接收文本框中显示
}
//****************************************************************** //******************************************************************
//UpdateReceiveTextBox
//功能:若串行接收和textBoxRev控件不是在同一线程中创建,那么通过Invoke
// 跨线程用串口接收到的数据来更新接收文本框中的数据
//参数:text-要显示的接收数据
//返回:无
//******************************************************************
private void UpdateReceiveTextBox(string text)
{
//不在同一线程
if (textBoxRev.InvokeRequired)
{
HandleInterfaceUpdateDelegate InterfaceUpdate=newHandleInterfaceUpdateDelegate(UpdateReceiveTextBox);
Invoke(InterfaceUpdate, new object[] { text });
}
//在同一线程
else
{
textBoxRev.Text += text;
}
}
public static string byteToHexStr(byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
}
}
return returnStr;
}
int length = SpCom.BytesToRead;
byte[] RevData = new byte[length];
int nHasRead = 0;
while(nHasRead != length)
{
nHasRead += SpCom.Read(RevData, nHasRead, length - nHasRead);//读串口接收缓冲区中的数据到RevData中
}