Пример #1
0
 /// <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);
     }
 }
Пример #2
0
        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();
            }
        }