NetworkStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) メソッド

定義

ストリームへの非同期の書き込みを開始します。Begins an asynchronous write to a stream.

public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int size, AsyncCallback? callback, object? state);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int size, AsyncCallback callback, object state);
override this.BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginWrite (buffer As Byte(), offset As Integer, size As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

buffer
Byte[]

Byte に書き込むデータを格納する NetworkStream 型の配列。An array of type Byte that contains the data to write to the NetworkStream.

offset
Int32

データの送信を開始する buffer 内の場所。The location in buffer to begin sending the data.

size
Int32

NetworkStream に書き込むバイト数。The number of bytes to write to the NetworkStream.

callback
AsyncCallback

AsyncCallback の完了時に実行される BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) デリゲート。The AsyncCallback delegate that is executed when BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) completes.

state
Object

追加のユーザー定義のデータを格納するオブジェクト。An object that contains any additional user-defined data.

戻り値

IAsyncResult

非同期呼び出しを表す IAsyncResultAn IAsyncResult that represents the asynchronous call.

例外

buffer パラメーターが null です。The buffer parameter is null.

offset パラメーターが 0 未満です。The offset parameter is less than 0.

- または --or- offset パラメーターが buffer の長さを超えています。The offset parameter is greater than the length of buffer.

- または --or- size パラメーターが 0 未満です。The size parameter is less than 0.

- または --or- size パラメーターが、buffer パラメーターの値を引いた offset の長さを超えています。The size parameter is greater than the length of buffer minus the value of the offset parameter.

基になっている Socket が閉じています。The underlying Socket is closed.

- または --or- ネットワークへの書き込み中にエラーが発生しました。There was a failure while writing to the network.

- または --or- ソケットへのアクセス中にエラーが発生しました。An error occurred when accessing the socket.

NetworkStream が閉じています。The NetworkStream is closed.

次のコード例では、を使用して、 BeginWrite データをネットワークストリームに非同期的に書き込みます。The following code example uses BeginWrite to write data asynchronously to a network stream. myWriteCallBackメソッドはデリゲートを実装し、 AsyncCallback がを返したときにシステムによって呼び出され BeginWrite ます。The myWriteCallBack method implements the AsyncCallback delegate and is called by the system when BeginWrite returns.

// Example of CanWrite, and BeginWrite.
// Check to see if this NetworkStream is writable.
if ( myNetworkStream->CanWrite )
{
   array<Byte>^myWriteBuffer = Encoding::ASCII->GetBytes( "Are you receiving this message?" );
   myNetworkStream->BeginWrite( myWriteBuffer, 0, myWriteBuffer->Length, gcnew AsyncCallback( &MyNetworkStreamClass::myWriteCallBack ), myNetworkStream );
   allDone->WaitOne();
}
else
{
   Console::WriteLine( "Sorry.  You cannot write to this NetworkStream." );
}
//Example of CanWrite, and BeginWrite.

 // Check to see if this NetworkStream is writable.
 if (myNetworkStream.CanWrite){

      byte[] myWriteBuffer = Encoding.ASCII.GetBytes("Are you receiving this message?");
      myNetworkStream.BeginWrite(myWriteBuffer, 0, myWriteBuffer.Length,
                                                   new AsyncCallback(NetworkStream_ASync_Send_Receive.myWriteCallBack),
                                                   myNetworkStream);
      allDone.WaitOne();
 }
 else{
      Console.WriteLine("Sorry.  You cannot write to this NetworkStream.");
 }

' Example of CanWrite, and BeginWrite.
' Check to see if this NetworkStream is writable.
If myNetworkStream.CanWrite Then
   
   Dim myWriteBuffer As Byte() = Encoding.ASCII.GetBytes("Are you receiving this message?")
   myNetworkStream.BeginWrite(myWriteBuffer, 0, myWriteBuffer.Length, New AsyncCallback(AddressOf NetworkStream_ASync_Send_Receive.myWriteCallBack), myNetworkStream)
   allDone.WaitOne()
Else
   Console.WriteLine("Sorry.  You cannot write to this NetworkStream.")
End If

注釈

メソッドは、 BeginWrite リモートホストへの非同期の送信操作を開始します。The BeginWrite method starts an asynchronous send operation to the remote host. メソッドを呼び出す BeginWrite と、別の実行スレッド内でデータを送信できるようになります。Calling the BeginWrite method gives you the ability to send data within a separate execution thread.

デリゲートを実装するコールバックメソッドを作成 AsyncCallback し、その名前をメソッドに渡す必要があり BeginWrite ます。You must create a callback method that implements the AsyncCallback delegate and pass its name to the BeginWrite method. 少なくとも、パラメーターに state はが含まれている必要があり NetworkStream ます。At the very minimum, your state parameter must contain the NetworkStream. コールバックでより多くの情報が必要な場合は、 NetworkStream とその他の必要な情報を格納するための小さなクラスまたは構造体を作成できます。If your callback needs more information, you can create a small class or structure to hold the NetworkStream and the other required information. パラメーターを使用して、構造体またはクラスのインスタンスをメソッドに渡し BeginWrite state ます。Pass the structure or class instance to the BeginWrite method through the state parameter.

コールバックメソッドは、メソッドを実装する必要があり EndWrite ます。Your callback method should implement the EndWrite method. アプリケーションがを呼び出すと BeginWrite 、システムは別のスレッドを使用して指定されたコールバックメソッドを実行し、 EndWriteNetworkStream 要求したバイト数を送信するか、例外をスローするまでブロックします。When your application calls BeginWrite, the system uses a separate thread to execute the specified callback method, and blocks on EndWrite until the NetworkStream sends the number of bytes requested or throws an exception. メソッドを呼び出した後に元のスレッドがブロックされるようにするには、 BeginWrite メソッドを使用し WaitOne ます。If you want the original thread to block after you call the BeginWrite method, use the WaitOne method. Set元のスレッドの実行を継続する場合は、コールバックメソッドでを呼び出します。Call Set in the callback method when you want the original thread to continue executing. コールバックメソッドの記述の詳細については、「 コールバックメソッドとしてのデリゲートのマーシャリング」を参照してください。For additional information about writing callback methods, see Marshaling a Delegate as a Callback Method.

注意

を受け取った場合は、プロパティをチェックして、が IOException InnerException 原因であるかどうかを確認し SocketException ます。If you receive an IOException, check the InnerException property to determine if it was caused by a SocketException. その場合は、プロパティを使用して ErrorCode 特定のエラーコードを取得し、エラーの詳細な説明については、 Windows Sockets VERSION 2 API エラーコード のドキュメントを参照してください。If so, use the ErrorCode property to obtain the specific error code and refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

読み取りおよび書き込み操作は、 NetworkStream 同期を必要とせずに、クラスのインスタンスで同時に実行できます。Read and write operations can be performed simultaneously on an instance of the NetworkStream class without the need for synchronization. 書き込み操作用の一意のスレッドが1つあり、読み取り操作用の一意のスレッドが1つであれば、読み取りと書き込みのスレッド間で相互干渉が発生することはなく、同期は必要ありません。As long as there is one unique thread for the write operations and one unique thread for the read operations, there will be no cross-interference between read and write threads and no synchronization is required.

適用対象

こちらもご覧ください