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); } }
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); }