FtpWebRequest.EndGetRequestStream(IAsyncResult) Methode

Definition

Beendet einen ausstehenden Vorgang, der mit BeginGetRequestStream(AsyncCallback, Object) gestartet wurde.Ends a pending asynchronous operation started with BeginGetRequestStream(AsyncCallback, Object).

public:
 override System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult);
public override System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult);
override this.EndGetRequestStream : IAsyncResult -> System.IO.Stream
Public Overrides Function EndGetRequestStream (asyncResult As IAsyncResult) As Stream

Parameter

asyncResult
IAsyncResult

Das IAsyncResult-Objekt, das zu Beginn des Vorgangs zurückgegeben wurde.The IAsyncResult object that was returned when the operation started.

Gibt zurück

Eine nicht schreibgeschützte Stream-Instanz, die dieser Instanz zugeordnet ist.A writable Stream instance associated with this instance.

Ausnahmen

asyncResult ist null.asyncResult is null.

asyncResult wurde nicht durch den Aufruf von BeginGetRequestStream(AsyncCallback, Object) abgerufen.asyncResult was not obtained by calling BeginGetRequestStream(AsyncCallback, Object).

Diese Methode wurde bereits für den durch asyncResult bezeichneten Vorgang aufgerufen.This method was already called for the operation identified by asyncResult.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie ein asynchroner Vorgang beendet wird, um den Datenstrom einer Anforderung zu erhalten.The following code example demonstrates ending an asynchronous operation to get a request's stream. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die Übersicht über die FtpWebRequest-Klasse bereitgestellt wird.This code example is part of a larger example provided for the FtpWebRequest class overview.

private:
   static void EndGetStreamCallback( IAsyncResult^ ar )
   {
      FtpState^ state = dynamic_cast<FtpState^>(ar->AsyncState);
      Stream^ requestStream = nullptr;

      // 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;
         array<Byte>^buffer = gcnew array<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, bufferLength );
            count += readBytes;
         }
         while ( readBytes != 0 );
         Console::WriteLine( "Writing {0} bytes to the stream.", count );

         // IMPORTANT: Close the request stream before sending the request.
         requestStream->Close();

         // Asynchronously get the response to the upload request.
         state->Request->BeginGetResponse( gcnew 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;
      }
   }
private static void EndGetStreamCallback(IAsyncResult ar)
{
    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 ("Writing {0} bytes to the stream.", 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;
    }
}

Hinweise

Wenn der Vorgang nicht abgeschlossen ist, wird die EndGetRequestStream-Methode blockiert, bis der Vorgang abgeschlossen ist.If the operation has not completed, the EndGetRequestStream method blocks until the operation completes. Überprüfen Sie die IsCompleted-Eigenschaft, bevor Sie EndGetRequestStreamaufrufen, um zu bestimmen, ob der Vorgang abgeschlossen wurde.To determine whether the operation has completed, check the IsCompleted property before calling EndGetRequestStream.

Zusätzlich zu den in "Ausnahmen" notierten Ausnahmen löst EndGetRequestStream erneut Ausnahmen aus, die ausgelöst wurden, während der Stream zum Schreiben geöffnet wurde.In addition to the exceptions noted in "Exceptions," EndGetRequestStream rethrows exceptions that were thrown while opening the stream for writing.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren.This member outputs trace information when you enable network tracing in your application. Weitere Informationen finden Sie unter Netzwerk Ablauf Verfolgung in der .NET Framework.For more information, see Network Tracing in the .NET Framework.

Gilt für:

Siehe auch