private void ReadFileCB(IAsyncResult ar)
        {
            ReadFileStateInfo state = ar.AsyncState as ReadFileStateInfo;

            if (state == null)
            {
                return;
            }
            FileStream fs    = state.ReadFileStream;
            int        count = fs.EndRead(ar);

            if (count > 0)
            {
                state.ResultStream.Write(state.ReadBuffer, 0, count);
                fs.BeginRead(state.ReadBuffer, 0, BUFFER_SIZE, new AsyncCallback(ReadFileCB), state);
            }
            else
            {
                if (fs != null)
                {
                    fs.Close();
                    fs = null;
                }

                state.EndProcessCB(ar);
            }
        }
        public void EndProcessRequest(IAsyncResult result)
        {
            ReadFileStateInfo state = result.AsyncState as ReadFileStateInfo;

            if (state == null)
            {
                return;
            }
            state.Context.Response.ContentType = "image/*";
            state.Context.Response.BinaryWrite(state.ResultStream.ToArray());
            state.ResultStream.Close();
        }