/// <summary> /// Чтение буфера /// </summary> protected override byte[] ReadBufferImplement() { try { Byte[] buff = new Byte[BufferSize]; ReadPipe.Read(buff); //return buff.SkipWhile(b => b == 0).ToArray(); return(buff); } catch (Exception usbExc) { OnDisconnected(); throw new AppiConnectoinException("Ошибка при чтении буфера АППИ из USB", usbExc); } }
void ReaderThread() { Thread.BeginThreadAffinity(); try { byte[] buffer = new byte[65536]; //int BufferUsed = 0; lock (OSThreadIdLock) OSThreadId = GetCurrentThreadId(); while (!Stopping) { #if false int BytesRead = Underlying.Read(buffer, BufferUsed, buffer.Length - BufferUsed); while (BytesRead == 4096) { BufferUsed += BytesRead; Array.Resize(ref buffer, buffer.Length + 65536); continue; } BufferUsed += BytesRead; if (BufferUsed > 0) { lock (Received) { Received.Append(Encoding.ASCII.GetString(buffer, 0, BufferUsed)); } BufferUsed = 0; } else { Thread.Sleep(10); } #else #if false int BytesRead = Underlying.Read(buffer, 0, 1); if (BytesRead == 1) { lock (Received) Received.Append(ConsoleEncoding.GetString(buffer, 0, 1)); } #else // This is probably not the most efficient approach. We'd be better off with a wait handle, because the process may get delayed waiting for us to read from the pipe. // But, I'll take whatever works. int BytesRead = Underlying.NonBlockingRead(buffer, buffer.Length); if (BytesRead > 0) { lock (Received) { Received.Append(ConsoleEncoding.GetString(buffer, 0, BytesRead)); } } else { Thread.Sleep(1); } #endif #endif } } catch (Exception ex) { lock (PendingExceptionLock) { if (PendingException == null) { PendingException = ex; } } } finally { Thread.EndThreadAffinity(); } }