MFC 串口消息响应函数会多次进入的有关问题

MFC 串口消息响应函数会多次进入的问题
下载了一个CSerial类,添加了串口接收消息响应函数,结果发现发送一次数据的时候会4次调用消息响应函数
第一次调用的时候收到的数据是正确的
最后得到的结果是发送的最后一个字符
串口接收消息响应函数:
LRESULT CMyCSerialAPPDlg::OnSerialMsg( WPARAM wParam, LPARAM lParam )
{
CSerial::EEvent eEvent = CSerial::EEvent( LOWORD( wParam ) );
if ( eEvent & CSerial::EEventRecv )
{
DWORD dwBytesRead = 0;
char szBuffer[ 11 ];
const int nBufLen = sizeof( szBuffer ) - 1;
CString StrTmp;
CString StrRecieve;
//do 
//{
DWORD lLastError = m_Comm.Read( szBuffer, nBufLen, &dwBytesRead );
//m_Comm.Clear();
if ( lLastError != ERROR_SUCCESS )
{
return lLastError;
}

if ( dwBytesRead > 0 )
{
szBuffer[ dwBytesRead ] = '\0';
StrTmp.Format( "%s", szBuffer );
StrRecieve += StrTmp;
}
//} while ( dwBytesRead == nBufLen );

SetDlgItemText( IDC_EDIT_RECIEVE, StrRecieve );
//Sleep(100);
}
return 0;
}

用串口助手发送:1234567890
第一次进入时收到的是:1234567890
最后结果是:0
求助,谢谢

------解决方案--------------------
串口中数据并不一定是你发多少,接收端缓冲区马上就能用多少
比如你发100字节,可以你第一次读取,只能读取到40字节,就读空了,但你再读取一次,可能又有40字节可以读取了,直到100字节被读取完成.

你这个串口会有多余的东西,首先你要确认后面一次读取是否成功
再有,你要看看你是用什么参数,发果有停止位,你接第一次接收到的0,可能也是0;

------解决方案--------------------
看一下这个类是否有读完后需要手动清空缓冲区或读完后手动复位接收中断位