void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int iRecSize = sp.BytesToRead; // 수신된 데이터 갯수
string strRxData;
string[] reData;
if (iRecSize != 0) // 수신된 데이터의 수가 0이 아닐때만 처리
{
strRxData = "";
byte[] buff = new byte[iRecSize];
sp.Read(buff, 0, iRecSize);
for (int iTemp = 0; iTemp < iRecSize; iTemp++)
{
strRxData += " " + buff[iTemp].ToString("X2");
}
reData = strRxData.Split(' ');
txtRx.Text += reData[5];
}
이 문장을 실행하면 3~4번정도 모듈에서 보내는 데이터를 받다가 프로그램이 중지되면서
IndexOutOfRangeException이(가) 처리되지 않았습니다. 인덱스가 배열 범위를 벗어났습니다. 라고 뜹니다.
이부분을 어떻게 처리해야지 문제없이 데이터를 계속 받을수 있을지 도와주세요.
reData = strRxData.Split(' ');
이문장이 실행되면서 이런 예외상황이 발생하는것 같습니다.
1.
IndexOutOfRangeException 이 예외는
txtRx.Text += reData[5]; 에서 발생한듯 합니다.
iRecSize 값이 5보다 작다면 reData[5] 가 존재하지 않기 때문이죠..
if( iRecSize >5) txtRx.Text += reData[5]; // 이렇게 해결하시면 될듯 합니다.
2.
reData = strRxData.Split(' ');
에서는 자세한 예외 메세지를 봐야 알수 있습니다.~
=> stRxData 에 TEXT로 변환하지 마시고
buff [] 에 있는 데이터를 아래처럼 직접 사용하는게 좋습니다.
if (iRecSize != 0) // 수신된 데이터의 수가 0이 아닐때만 처리
{
byte[] buff = new byte[iRecSize];
sp.Read(buff, 0, iRecSize);
txtRx.Text += buff[5].ToString();