private static void EndGetResponseCallback(IAsyncResult ar) { if (ar.AsyncState == null) { return; } FtpState state = (FtpState)ar.AsyncState; try { var response = (FtpWebResponse)state.Request.EndGetResponse(ar); response.Close(); if (response.StatusDescription == null) { return; } state.StatusDescription = response.StatusDescription; // Signal the main application thread that // the operation is complete. state.OperationComplete.Set(); } // Return exceptions to the main application thread. catch (Exception e) { Console.WriteLine("Error getting response."); state.OperationException = e; state.OperationComplete.Set(); } }
private static void EndGetStreamCallback(IAsyncResult ar) { if (ar.AsyncState == null) { return; } FtpState state = (FtpState)ar.AsyncState; Stream requestStream = null; // End the asynchronous call to get the request stream. try { requestStream = state.Request.EndGetRequestStream(ar); // Copy the file contents to the request stream. const int bufferLength = 2048; byte[] buffer = new byte[bufferLength]; int count = 0; int readBytes = 0; FileStream stream = File.OpenRead(state.FileName); do { readBytes = stream.Read(buffer, 0, bufferLength); requestStream.Write(buffer, 0, readBytes); count += readBytes; }while (readBytes != 0); Console.WriteLine("-->{0}", count); // IMPORTANT: Close the request stream before sending the request. requestStream.Close(); // Asynchronously get the response to the upload request. state.Request.BeginGetResponse( new AsyncCallback(EndGetResponseCallback), state ); } // Return exceptions to the main application thread. catch (Exception e) { Console.WriteLine("Could not get the request stream."); state.OperationException = e; state.OperationComplete.Set(); return; } }