Język

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

Definicja

Rozpoczyna asynchroniczną operację odczytu, która odczytuje dane ze strumienia i zapisuje je w określonej tablicy.

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);
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

Parametry

buffer
Byte[]

Tablica Byte , która odbiera bajty odczytane ze strumienia.

offset
Int32

Lokalizacja oparta na zera, w buffer której należy rozpocząć przechowywanie danych odczytanych z tego strumienia.

count
Int32

Maksymalna liczba bajtów do odczytu ze strumienia.

asyncCallback
AsyncCallback

Delegat AsyncCallback , który odwołuje się do metody wywoływania po zakończeniu operacji odczytu.

asyncState
Object

Obiekt zdefiniowany przez użytkownika zawierający informacje o operacji odczytu. Ten obiekt jest przekazywany do delegata po zakończeniu asyncCallback operacji.

Zwraca

IAsyncResult Obiekt wskazujący stan operacji asynchronicznej.

Wyjątki

Parametr buffer ma wartość null.

offset wartość jest mniejsza niż 0.

— lub —

offsetwartość jest większa niż długość .buffer

— lub —

offset plus count jest większy niż długość buffer.

Operacja odczytu nie powiodła się.

— lub —

Szyfrowanie jest używane, ale nie można odszyfrować danych.

Trwa już operacja odczytu.

Ten obiekt został zamknięty.

Uwierzytelnianie nie wystąpiło.

Przykłady

W poniższym przykładzie kodu pokazano uruchamianie asynchronicznej operacji odczytu. Ten przykład kodu jest częścią większego przykładu udostępnionego dla klasy NegotiateStream.

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();
}

Uwagi

Jeśli włączono szyfrowanie, podpisywanie lub szyfrowanie i podpisywanie, operacja odczytu odczytuje dane z bazowego strumienia, sprawdza integralność danych i odszyfrowuje je. Jeśli nie są używane żadne usługi zabezpieczeń, takie jak szyfrowanie danych lub logowanie, ta metoda uruchamia asynchroniczną operację odczytu na bazowym strumieniu.

Ta metoda jest asynchroniczna i nie blokuje się podczas wykonywania operacji. Aby zablokować działanie do momentu zakończenia operacji, użyj Read metody .

Operacja odczytu asynchronicznego musi zostać ukończona przez wywołanie EndRead metody . Zazwyczaj metoda jest wywoływana przez delegata asyncCallback . Aby uzyskać szczegółowe informacje na temat używania modelu programowania asynchronicznego, zobacz Wywoływanie metod synchronicznych asynchronicznie

Klasa NegotiateStream nie obsługuje wielu równoczesnych operacji odczytu. Jeśli spróbujesz uruchomić operację odczytu, gdy inna operacja odczytu jest już wykonywana w tym samym strumieniu, NotSupportedException zostanie zgłoszony wyjątek.

Nie można wywołać tej metody do momentu pomyślnego uwierzytelnienia. Aby przeprowadzić uwierzytelnianie, wywołaj jedną z AuthenticateAsClientmetod , , AuthenticateAsClientAsyncBeginAuthenticateAsClient, AuthenticateAsServer, AuthenticateAsServerAsynclub BeginAuthenticateAsServer .

Dotyczy