/// <summary> /// Starts sending TOP command to POP3 server. /// </summary> /// <param name="op">Asynchronous operation.</param> /// <returns>Returns true if aynchronous operation is pending (The <see cref="MessageTopLinesToStreamAsyncOP.CompletedAsync"/> event is raised upon completion of the operation). /// Returns false if operation completed synchronously.</returns> /// <exception cref="ObjectDisposedException">Is raised when this object is disposed and and this method is accessed.</exception> /// <exception cref="InvalidOperationException">Is raised when POP3 client is not in valid state. For example 'not connected'.</exception> /// <exception cref="ArgumentNullException">Is raised when <b>op</b> is null reference.</exception> public bool MessageTopLinesToStreamAsync(MessageTopLinesToStreamAsyncOP op) { if(this.IsDisposed){ throw new ObjectDisposedException(this.GetType().Name); } if(this.IsMarkedForDeletion){ throw new InvalidOperationException("Message is already marked for deletion."); } if(op == null){ throw new ArgumentNullException("op"); } if(op.State != AsyncOP_State.WaitingForStart){ throw new ArgumentException("Invalid argument 'op' state, 'op' must be in 'AsyncOP_State.WaitingForStart' state.","op"); } return op.Start(this); }
/// <summary> /// Stores message header + specified number lines of message body to the specified stream. /// </summary> /// <param name="stream">Stream where to store data.</param> /// <param name="lineCount">Number of lines to get from message body.</param> /// <exception cref="ObjectDisposedException">Is raised when this object is disposed and this method is accessed.</exception> /// <exception cref="ArgumentNullException">Is raised when argument <b>stream</b> value is null.</exception> /// <exception cref="InvalidOperationException">Is raised when message is marked for deletion and this method is accessed.</exception> /// <exception cref="POP3_ClientException">Is raised when POP3 serveer returns error.</exception> public void MessageTopLinesToStream(Stream stream,int lineCount) { if(this.IsDisposed){ throw new ObjectDisposedException(this.GetType().Name); } if(stream == null){ throw new ArgumentNullException("Argument 'stream' value can't be null."); } if(this.IsMarkedForDeletion){ throw new InvalidOperationException("Can't access message, it's marked for deletion."); } using(MessageTopLinesToStreamAsyncOP op = new MessageTopLinesToStreamAsyncOP(stream,lineCount)){ using(ManualResetEvent wait = new ManualResetEvent(false)){ op.CompletedAsync += delegate(object s1,EventArgs<MessageTopLinesToStreamAsyncOP> e1){ wait.Set(); }; if(!this.MessageTopLinesToStreamAsync(op)){ wait.Set(); } wait.WaitOne(); wait.Close(); if(op.Error != null){ throw op.Error; } } } }