NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Methode

Definitie

Hiermee wordt een asynchrone leesbewerking gestart waarmee gegevens uit de stroom worden gelezen en opgeslagen in de opgegeven matrix.

public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult

Parameters

buffer
Byte[]

Een Byte matrix die de bytes ontvangt die uit de stream worden gelezen.

offset
Int32

De op nul gebaseerde locatie buffer waar de gegevens uit deze stroom moeten worden opgeslagen.

count
Int32

Het maximum aantal bytes dat uit de stream moet worden gelezen.

asyncCallback
AsyncCallback

Een AsyncCallback gemachtigde die verwijst naar de methode die moet worden aangeroepen wanneer de leesbewerking is voltooid.

asyncState
Object

Een door de gebruiker gedefinieerd object met informatie over de leesbewerking. Dit object wordt doorgegeven aan de asyncCallback gemachtigde wanneer de bewerking is voltooid.

Retouren

Een IAsyncResult object dat de status van de asynchrone bewerking aangeeft.

Uitzonderingen

buffer is null.

offset is kleiner dan 0.

– of –

offset is groter dan de lengte van buffer.

– of –

offset plus count is groter dan de lengte van buffer.

De leesbewerking is mislukt.

– of –

Versleuteling wordt gebruikt, maar de gegevens kunnen niet worden ontsleuteld.

Er wordt al een leesbewerking uitgevoerd.

Dit object is gesloten.

Er is geen verificatie opgetreden.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een asynchrone leesbewerking start. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de NegotiateStream klasse.

public static void AuthenticateClient(TcpClient clientRequest)
{
    NetworkStream stream = clientRequest.GetStream();
    // Create the NegotiateStream.
    NegotiateStream authStream = new NegotiateStream(stream, false);
    // Save the current client and NegotiateStream instance
    // in a ClientState object.
    ClientState cState = new ClientState(authStream, clientRequest);
    // Listen for the client authentication request.
    Task authTask = authStream
        .AuthenticateAsServerAsync()
        .ContinueWith(task => { EndAuthenticateCallback(cState); });

    // Any exceptions that occurred during authentication are
    // thrown by the EndAuthenticateAsServer method.
    try
    {
        // This call blocks until the authentication is complete.
        authTask.Wait();
    }
    catch (AuthenticationException e)
    {
        Console.WriteLine(e);
        Console.WriteLine("Authentication failed - closing connection.");
        return;
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        Console.WriteLine("Closing connection.");
        return;
    }

    Task<int> readTask = authStream
        .ReadAsync(cState.Buffer, 0, cState.Buffer.Length);

    readTask
        .ContinueWith((task) => { EndReadCallback(cState, task.Result); })
        .Wait();
    // Finished with the current client.
    authStream.Close();
    clientRequest.Close();
}

Opmerkingen

Als versleuteling, ondertekening of versleuteling en ondertekening zijn ingeschakeld, leest de leesbewerking de gegevens uit de onderliggende stroom, controleert de integriteit van de gegevens en ontsleutelt deze. Als er geen beveiligingsservices zoals gegevensversleuteling of ondertekening worden gebruikt, start deze methode een asynchrone leesbewerking op de onderliggende stroom.

Deze methode is asynchroon en blokkeert niet terwijl de bewerking is voltooid. Gebruik de Read methode om te blokkeren totdat de bewerking is voltooid.

De asynchrone leesbewerking moet worden voltooid door de methode aan te EndRead roepen. Normaal gesproken wordt de methode aangeroepen door de asyncCallback gemachtigde. Zie Synchrone methoden asynchroon aanroepen voor gedetailleerde informatie over het gebruik van het asynchrone programmeermodel

De NegotiateStream klasse biedt geen ondersteuning voor meerdere gelijktijdige leesbewerkingen. Als u een leesbewerking probeert te starten terwijl er al een andere leesbewerking wordt uitgevoerd op dezelfde stream, wordt er een NotSupportedException uitzondering gegenereerd.

U kunt deze methode pas aanroepen als u bent geverifieerd. Als u wilt verifiëren, roept u een van de AuthenticateAsClientmethoden , , AuthenticateAsClientAsync, AuthenticateAsServerAsyncBeginAuthenticateAsClientAuthenticateAsServerof BeginAuthenticateAsServer methoden aan.

Van toepassing op