using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace Apewer.Web { internal sealed class MiniStreamAsyncResult : IAsyncResult { object locker = new object(); ManualResetEvent handle; bool completed; internal byte[] Buffer = null; internal int Offset = 0; internal int Count = 0; internal AsyncCallback Callback = null; internal object State = null; internal int SynchRead = 0; internal Exception Error = null; public void Complete(Exception e) { Error = e; Complete(); } public void Complete() { lock (locker) { if (completed) return; completed = true; if (handle != null) handle.Set(); if (Callback != null) Callback.BeginInvoke(this, null, null); } } public object AsyncState { get { return State; } } public WaitHandle AsyncWaitHandle { get { lock (locker) { if (handle == null) handle = new ManualResetEvent(completed); } return handle; } } public bool CompletedSynchronously { get { return (SynchRead == Count); } } public bool IsCompleted { get { lock (locker) { return completed; } } } } }