protected void ReadLoop()
{
byte[] buffer = new byte[_readBufferSize];
int read;
while (_continueReading)
{
try { read = ReadDirect(buffer, 0, _readBufferSize); } // wait for some data (set _readBufferSize to 1 to wait for any data)
catch (ThreadAbortException) { return; } // (if we were aborted, pass away silently)
OnDataReceived(buffer, read); // and process it
}
}