/// <summary> /// Default constructor. /// </summary> /// <param name="owner">Owner stream.</param> /// <param name="terminator">Data terminator.</param> /// <param name="storeStream">Stream where to store readed header.</param> /// <param name="maxCount">Maximum number of bytes to read. Value 0 means not limited.</param> /// <param name="exceededAction">Specifies how this method behaves when maximum line size exceeded.</param> /// <param name="callback">The AsyncCallback delegate that is executed when asynchronous operation completes.</param> /// <param name="asyncState">User-defined object that qualifies or contains information about an asynchronous operation.</param> /// <exception cref="ArgumentNullException">Is raised when <b>owner</b>,<b>terminator</b> or <b>storeStream</b> is null reference.</exception> public ReadToTerminatorAsyncOperation(SmartStream owner,string terminator,Stream storeStream,long maxCount,SizeExceededAction exceededAction,AsyncCallback callback,object asyncState) { if(owner == null){ throw new ArgumentNullException("owner"); } if(terminator == null){ throw new ArgumentNullException("terminator"); } if(storeStream == null){ throw new ArgumentNullException("storeStream"); } if(maxCount < 0){ throw new ArgumentException("Argument 'maxCount' must be >= 0."); } m_pOwner = owner; m_Terminator = terminator; m_pTerminatorBytes = Encoding.ASCII.GetBytes(terminator); m_pStoreStream = storeStream; m_MaxCount = maxCount; m_SizeExceededAction = exceededAction; m_pAsyncCallback = callback; m_pAsyncState = asyncState; m_pAsyncWaitHandle = new AutoResetEvent(false); m_pLineBuffer = new byte[32000]; // Start reading data. #pragma warning disable m_pOwner.BeginReadLine(m_pLineBuffer,0,m_pLineBuffer.Length - 2,m_SizeExceededAction,new AsyncCallback(this.ReadLine_Completed),null); #pragma warning restore }