public virtual void DataAvailable(bool timeout) { if (timeout) { TryUpdatePrinterStatus(null, timeout); return; } if (ReadBuffer.Count() % 4 == 0) { var bytes = new byte[4]; for (int i = 0; i < 4; i++) { if (!ReadBuffer.TryDequeue(out bytes[i])) { // Ran out of bytes unexpectedly. return; } } TryUpdatePrinterStatus(bytes, timeout); // TODO: call other update handlers. } }