Пример #1
0
        private static void asyncReadAllReadCallback(IAsyncResult ar)
        {
            IOAsyncResult myar = (IOAsyncResult)ar.AsyncState;

            try {
                int len = myar.Stream.EndRead(ar);
                if (len <= 0)
                {
                    throw new EndOfStreamException();
                }
                myar.Offset += len;
                myar.Left   -= len;
                myar.Count  += len;
                if (myar.Left > 0)
                {
                    myar.Stream.BeginRead(myar.Buffer, myar.Offset, myar.Left, asyncReadAllReadCallback, ar);
                }
                else
                {
                    myar.SetCompleted(false, myar.Count, null);
                }
            } catch (Exception ex) {
                myar.SetCompleted(false, ex);
            }
        }
Пример #2
0
        public static IAsyncResult BeginReadAll(Stream stream, byte[] buffer, int offset, int count, AsyncCallback callback, object state)
        {
            IOAsyncResult ar = new IOAsyncResult(callback, state)
            {
                Stream = stream, Buffer = buffer, Offset = 0, Count = 0, Left = count
            };

            if (ar.Left <= 0)
            {
                ar.SetCompleted(true, null);
                return(ar);
            }
            stream.BeginRead(ar.Buffer, ar.Offset, ar.Left, asyncReadAllReadCallback, ar);
            return(ar);
        }