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 |
---|---|
buffer ist NULL (Nothing in Visual Basic). |
|
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. |
|
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. |
|
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