private void ReadBytes(byte[] data, int offset, int count) { //DateTime startTime = DateTime.Now; do { int bytesRead = serialPort.Read(data, offset, count); offset += bytesRead; count -= bytesRead; //if ((DateTime.Now - startTime).Milliseconds > serialPort.ReadTimeout) //{ // throw new Exception(); //} if (bytesRead == 0) { serialPort.DiscardInBuffer(); break; } Thread.Sleep(1); } while (count > 0); if (count != 0) { throw new Exception(); } }
void _readThreadStart() { int bytesToRead = 0; byte[] readBuffer; cardID = new string(null); for (; ;) { bytesToRead = serialPort.BytesToRead; if (bytesToRead > 0) { readBuffer = new byte[bytesToRead]; serialPort.Read(readBuffer, 0, bytesToRead); for (int i = 0; i < readBuffer.Length; i++) { cardID += (char)readBuffer[i]; if (cardID.Length == ID_LENGTH) { if (cardID[0] != 2) { HandleChecksumError(); break; } //verify checksum int cs = 0; for (int x = 1; x < 10; x += 2) { cs ^= ASCIIToNum((char)cardID[x], (char)cardID[x + 1]); } if (cs != cardID[11]) { HandleChecksumError(); break; } OnIDReadyEvent(this, cardID); System.Threading.Thread.Sleep(100); cardID = new string(null); break; } } } System.Threading.Thread.Sleep(10); } }