Freigeben über


NetworkStream.BeginRead-Methode

Beginnt einen asynchronen Lesevorgang aus dem NetworkStream.

Namespace: System.Net.Sockets
Assembly: System (in system.dll)

Syntax

'Declaration
Public Overrides Function BeginRead ( _
    buffer As Byte(), _
    offset As Integer, _
    size As Integer, _
    callback As AsyncCallback, _
    state As Object _
) As IAsyncResult
'Usage
Dim instance As NetworkStream
Dim buffer As Byte()
Dim offset As Integer
Dim size As Integer
Dim callback As AsyncCallback
Dim state As Object
Dim returnValue As IAsyncResult

returnValue = instance.BeginRead(buffer, offset, size, callback, state)
public override IAsyncResult BeginRead (
    byte[] buffer,
    int offset,
    int size,
    AsyncCallback callback,
    Object state
)
public:
virtual IAsyncResult^ BeginRead (
    array<unsigned char>^ buffer, 
    int offset, 
    int size, 
    AsyncCallback^ callback, 
    Object^ state
) override
public IAsyncResult BeginRead (
    byte[] buffer, 
    int offset, 
    int size, 
    AsyncCallback callback, 
    Object state
)
public override function BeginRead (
    buffer : byte[], 
    offset : int, 
    size : int, 
    callback : AsyncCallback, 
    state : Object
) : IAsyncResult

Parameter

  • buffer
    Ein Array vom Typ Byte, das dem Speicherort entspricht, an dem aus dem NetworkStream gelesene Daten gespeichert werden.
  • offset
    Die Position in buffer, an der mit dem Speichern der Daten begonnen werden soll.
  • size
    Die Anzahl der aus dem NetworkStream zu lesenden Bytes.
  • callback
    Der AsyncCallback-Delegat, der nach Abschluss von BeginRead ausgeführt wird.
  • state
    Ein Objekt, das zusätzliche, benutzerdefinierte Daten enthält.

Rückgabewert

Ein IAsyncResult, das den asynchronen Aufruf darstellt.

Ausnahmen

Ausnahmetyp Bedingung

ArgumentNullException

buffer ist NULL (Nothing in Visual Basic).

ArgumentOutOfRangeException

offset ist kleiner als 0.

- oder -

offset ist größer als die Länge von buffer.

- oder -

size ist kleiner als 0.

- oder -

size ist größer als die Länge von buffer minus dem Wert des offset-Parameters.

IOException

Der zugrunde liegende Socket wird geschlossen.

- oder -

Beim Lesen aus dem Netzwerk ist ein Fehler aufgetreten.

– oder –

Fehler beim Zugriff auf den Socket. Weitere Informationen finden Sie im Abschnitt Hinweise.

ObjectDisposedException

Der NetworkStream ist geschlossen.

Hinweise

Die BeginRead-Methode beginnt einen asynchronen Datenlesevorgang aus den eingehenden Netzwerkpuffern. Durch einen Aufruf der BeginRead-Methode können Sie Daten in einem eigenen Ausführungsthread empfangen.

Sie müssen eine Rückrufmethode erstellen, die den AsyncCallback-Delegaten implementiert, und deren Namen an die BeginRead-Methode übergeben. Der state-Parameter muss zumindest den NetworkStream enthalten. Wenn Sie die empfangenen Daten in der Rückrufmethode abrufen möchten, müssen Sie eine kleine Klasse oder Struktur erstellen, die einen Lesepuffer und andere nützliche Informationen enthält. Übergeben Sie die Struktur oder Klasseninstanz im state-Parameter an die BeginRead-Methode.

Die Rückrufmethode sollte die EndRead-Methode aufrufen. Bei einem Aufruf von BeginRead durch die Anwendung wartet das System, bis Daten empfangen werden oder ein Fehler auftritt, verwendet anschließend einen eigenen Thread zum Ausführen der angegebenen Rückrufmethode und blockiert EndRead, bis der bereitgestellte NetworkStream Daten liest oder eine Ausnahme auslöst. Wenn der ursprüngliche Thread blockiert werden soll, nachdem die BeginRead-Methode aufgerufen wurde, verwenden Sie die WaitOne-Methode. Rufen Sie Set in der Rückrufmethode auf, wenn der ursprüngliche Thread weiter ausgeführt werden soll. Weitere Informationen über das Verfassen von Rückrufmethoden finden Sie unter Beispiel zu Callbacks.

Die BeginRead-Methode liest alle verfügbaren Daten bis zu der im size-Parameter angegebenen Anzahl von Bytes.

Hinweis

Wenn Sie eine IOException erhalten, überprüfen Sie die InnerException-Eigenschaft, um zu bestimmen, ob die Ausnahme von einer SocketException verursacht wurde. Verwenden Sie in diesem Fall die ErrorCode-Eigenschaft, um den spezifischen Fehlercode abzurufen. In MSDN finden Sie in der Dokumentation zu API-Fehlercodes unter Windows Sockets, Version 2, eine ausführliche Beschreibung des Fehlers.

Beispiel

Im folgenden Codebeispiel wird BeginRead verwendet, um Daten asynchron aus dem Netzwerkstream zu lesen. Die myReadCallBack-Methode implementiert den AsyncCallback-Delegaten und wird vom System aufgerufen, wenn BeginRead beendet wird.

' Check to see if this NetworkStream is readable.
If myNetworkStream.CanRead Then
   
   Dim myReadBuffer(1024) As Byte
   myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length, New AsyncCallback(AddressOf NetworkStream_ASync_Send_Receive.myReadCallBack), myNetworkStream)
   
   allDone.WaitOne()
Else
   Console.WriteLine("Sorry.  You cannot read from this NetworkStream.")
End If
// Check to see if this NetworkStream is readable.
if(myNetworkStream.CanRead){
    
    byte[] myReadBuffer = new byte[1024];
    myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length, 
                                                 new AsyncCallback(NetworkStream_ASync_Send_Receive.myReadCallBack), 
                                                 myNetworkStream);  

    allDone.WaitOne();
}
else{
     Console.WriteLine("Sorry.  You cannot read from this NetworkStream.");
}
// Check to see if this NetworkStream is readable.
if ( myNetworkStream->CanRead )
{
   array<Byte>^myReadBuffer = gcnew array<Byte>(1024);
   myNetworkStream->BeginRead( myReadBuffer, 0, myReadBuffer->Length, gcnew AsyncCallback( &MyNetworkStreamClass::myReadCallBack ), myNetworkStream );
   allDone->WaitOne();
}
else
{
   Console::WriteLine( "Sorry.  You cannot read from this NetworkStream." );
}
// Check to see if this NetworkStream is readable.
if (myNetworkStream.get_CanRead()) {
    ubyte myReadBuffer[] = new ubyte[1024];
    myNetworkStream.BeginRead(myReadBuffer, 0,
        myReadBuffer.get_Length(), 
        new AsyncCallback(NetworkStreamASyncSendReceive.
        MyReadCallBack), myNetworkStream);
    allDone.WaitOne();
}
else {
    Console.WriteLine("Sorry.  You cannot read from this "
        + "NetworkStream.");
}

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

NetworkStream-Klasse
NetworkStream-Member
System.Net.Sockets-Namespace
EndRead