/// <summary> /// Asynchronusly retrieve a MD5 hash. The XMD5 command is non-standard /// and not guaranteed to work. /// </summary> /// <param name="client">FtpClient Object</param> /// <param name="path">Full or relative path to remote file</param> /// <param name="callback">AsyncCallback</param> /// <param name="state">State Object</param> /// <returns>IAsyncResult</returns> public static IAsyncResult BeginGetXMD5(this FtpClient client, string path, AsyncCallback callback, object state) { AsyncGetXMD5 func = new AsyncGetXMD5(client.GetXMD5); IAsyncResult ar = func.BeginInvoke(path, callback, state); ; lock (m_asyncmethods) { m_asyncmethods.Add(ar, func); } return ar; }
/// <summary> /// Begins an asynchronous operation to retrieve a XMD5 hash. The XMD5 command is non-standard /// and not guaranteed to work. /// </summary> /// <param name="path">Full or relative path to remote file</param> /// <param name="callback">AsyncCallback</param> /// <param name="state">State Object</param> /// <returns>IAsyncResult</returns> public IAsyncResult BeginGetXMD5(string path, AsyncCallback callback, object state) { AsyncGetXMD5 func = new AsyncGetXMD5(GetXMD5); IAsyncResult ar = func.BeginInvoke(path, callback, state);; lock (m_asyncmethods) { m_asyncmethods.Add(ar, func); } return(ar); }
/// <summary> /// Ends an asynchronous call to <see cref="BeginGetXMD5"/> /// </summary> /// <param name="ar">IAsyncResult returned from <see cref="BeginGetXMD5"/></param> /// <returns>The MD5 hash of the specified file.</returns> public string EndGetXMD5(IAsyncResult ar) { AsyncGetXMD5 func = null; lock (m_asyncmethods) { if (!m_asyncmethods.ContainsKey(ar)) { throw new InvalidOperationException("The specified IAsyncResult was not found in the collection."); } func = (AsyncGetXMD5)m_asyncmethods[ar]; m_asyncmethods.Remove(ar); } return(func.EndInvoke(ar)); }