NetworkStream.BeginWrite メソッド
ストリームへの非同期の書き込みを開始します。
Overrides Public Function BeginWrite( _
ByVal buffer() As Byte, _ ByVal offset As Integer, _ ByVal size As Integer, _ ByVal callback As AsyncCallback, _ ByVal state As Object _) As IAsyncResult
[C#]
public override IAsyncResult BeginWrite(byte[] buffer,intoffset,intsize,AsyncCallbackcallback,objectstate);
[C++]
public: IAsyncResult* BeginWrite(unsigned charbuffer __gc[],intoffset,intsize,AsyncCallback* callback,Object* state);
[JScript]
public override function BeginWrite(
buffer : Byte[],offset : int,size : int,callback : AsyncCallback,state : Object) : IAsyncResult;
パラメータ
- buffer
NetworkStream に書き込むデータを格納する Byte 型の配列。 - offset
データの送信を開始する buffer 内の場所。 - size
NetworkStream に書き込むバイト数。 - callback
BeginWrite の完了時に実行される AsyncCallback デリゲート。 - state
追加のユーザー定義のデータを格納するオブジェクト。
戻り値
非同期呼び出しを表す IAsyncResult 。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | buffer が null 参照 (Visual Basic では Nothing) です。 |
ArgumentOutOfRangeException | offset が 0 未満です。
または offset が buffer の長さを超えています。 または size が 0 未満です。 または size が、 buffer の長さから offset パラメータの値を引いた値を超えています。 |
IOException | 基になっている Socket が閉じています。
または ネットワークへの書き込み中にエラーが発生しました。 |
ObjectDisposedException | NetworkStream が閉じています。 |
IOException | ソケットへのアクセス中にエラーが発生しました。詳細については「解説」を参照してください。 |
解説
BeginWrite メソッドは、リモート ホストへの非同期送信操作を開始します。 BeginWrite メソッドを呼び出すと、個別の実行スレッド内でデータを送信できます。
AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginWrite メソッドに渡す必要があります。使用する state パラメータは、少なくとも NetworkStream を格納している必要があります。他の情報がコールバックに必要な場合は、小さなクラスまたは構造体を作成して NetworkStream などの必要な情報を保持します。構造体またはクラスのインスタンスは、 state パラメータを使用して BeginWrite メソッドに渡します。
コールバック メソッドは EndWrite メソッドを実装する必要があります。アプリケーションが BeginWrite を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、 EndWrite は、 NetworkStream が要求バイト数を送信するか例外をスローするまでブロックします。 BeginWrite メソッドを呼び出してから元のスレッドをブロックする場合は、 WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドで Set を呼び出します。コールバック メソッドの記述に関する追加情報については、「 Callback のサンプル 」を参照してください。
メモ IOException が発生した場合は、 InnerException プロパティの値を見ることによって、この原因が SocketException かどうかを確認してください。その場合、 ErrorCode を使用して特定のエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。
使用例
[Visual Basic, C#, C++] BeginWrite を使用して、ネットワーク ストリームに非同期的にデータを書き込む例を次に示します。 m
yWriteCallBack
メソッドは AsyncCallback デリゲートを実装しており、 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
[C#]
// 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.");
}
[C++]
// Check to see if this NetworkStream is writable.
if (myNetworkStream->CanWrite) {
Byte myWriteBuffer[] = Encoding::ASCII->GetBytes(S"Are you receiving this message?");
myNetworkStream->BeginWrite(myWriteBuffer, 0, myWriteBuffer->Length,
new AsyncCallback(0, &MyNetworkStreamClass::myWriteCallBack),
myNetworkStream);
allDone->WaitOne();
} else {
Console::WriteLine(S"Sorry. You cannot write to this NetworkStream.");
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
NetworkStream クラス | NetworkStream メンバ | System.Net.Sockets 名前空間 | EndWrite | 非同期呼び出しの組み込み