public override void BeginGetRequestStream() { HttpWebRequest httpWebRequest = WebRequest.Create(userDownload.url) as HttpWebRequest; httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; httpWebRequest.AddRange(clientSegment.startPos, clientSegment.endPos); httpWebRequest.BeginGetResponse(GetRequestStreamCallback, httpWebRequest); } private void GetRequestStreamCallback(IAsyncResult iAsyncResult) { HttpWebResponse httpWebResponse = (iAsyncResult.AsyncState as HttpWebRequest).EndGetResponse(iAsyncResult) as HttpWebResponse; NetworkStream networkStream = new NetworkStream( httpWebResponse.GetResponseStream(); stream.BeginRead(buf, 0, buf.Length, StreamReadCallback, stream); } private void StreamReadCallback(IAsyncResult iAsyncResult) { Stream stream = iAsyncResult.AsyncState as Stream; int len = stream.EndRead(iAsyncResult); clientSegment.offset += len; bufferedStream.Write(buf, 0, len); stream.BeginRead(buf, 0, buf.Length, StreamReadCallback, stream); }