Hi
I noticed that the TransferComplete event is firing prior to running ValidateTransfer.
This caused errors for me as I was assuming when the transfer was complete I could close the ftp connection, however attempting to do so causes exceptions as 'ValidateTransfer' (part of the put method) requires the connection to still be open.
I understand most people will probably want to write synchronous code such as ;
TransferFile
{
  FtpClient ftp = new FtpClient()
  ftp.login();
  ftp.put();
  ftp.quit();
}But I needed to seperate this out to;
OnDialupConnected
{
  ftp.login();
  ftp.put();
}
On FtpTransferComplete
{
   ftp.quit();
   CloseDialupConnection();
}As an enhancement / minor bug-fix I would request that the TransferComplete event is only fired /after/ ValidateTransfer.
As a workaround I added an event to ValidateTransfer that I can subscribe to.
/// <summary>
/// Event for notifying transfer complete and validated
/// </summary>
public virtual event EventHandler TransferValidated;
public virtual void ValidateTransfer()
{            
    CheckConnection(true);
    
    // check the control response
    string[] validCodes = new string[]{"225", "226", "250", "426", "450"};
    FTPReply reply = control.ReadReply();
    
    // permit 426/450 error if we cancelled the transfer, otherwise
    // throw an exception
    string code = reply.ReplyCode;
    if ((code.Equals("426") || code.Equals("450")) && !cancelTransfer)
        throw new FTPException(reply);
    
    lastValidReply = control.ValidateReply(reply, validCodes);
      if (TransferValidated != null)   TransferValidated(this, new EventArgs());
}
Thanks
Paul