6

わかりました、なぜこれがどこにも見つからないのか、またはそれが存在しない場合、なぜマイクロソフトはそれを実装していないのか、少し混乱していますか?

これが私のシナリオです。私は、DataAvailable という素敵な小さなブール値を持つ NetworkStream を持っています。必要なのは、飛び出して「ねえ、利用可能なデータがあります!」と言うイベントです。(私は怠け者であり、「実際、今回はあります」という応答が得られるまで、「わかりました、利用可能なデータはありますか?」と何度も何度も尋ね続けるよりも、利用可能なデータがあると言われたいからです)。

SerialPort に似たもの (いいイベント (DataReceived) があり、データがポートから受信されていることを親切に知らせてくれます) がいいでしょう。しかし、私は NetworkStream でソケットを使用しています。

私が欠けていることが露骨に明らかな何かがある場合は正しい方向に向けてください。そうでない場合は、DataAvailable プロパティでデータバインディングを使用する必要があり、それが true に設定されている場合は、私の独自の「自家製」イベント/機能? これがその方法である場合、ボールを転がすための小さな例を教えてください。

編集
私の完璧な答えは、誰かが来て、SerialPort で使用される DataReceived イベントに非常に似ているが、NetworkStream を介してストリーミングしている Socket 用に実装されたものを見つける/作成する方法を説明することです!

よろしくお願いします。

4

2 に答える 2

7

トーマスの答えを明確にするために、BeginRead メソッドに慣れておらず、この質問に対する答えを理解したい人のための説明を添えて、次のように呼び出すことができます。

AsyncCallBack MyCallBack = new AsynCallBack(DataReceived);
networkStream.BeginRead(buffer, offset, size, MyCallBack, MyObject);

次に、DataReceived 関数を作成します。

private void DataReceived(IAsynResult result)
  {
  //call receive functionality
  }

これは、SerialPort.DataReceived イベントの動作と非常によく似た DataReceived を呼び出します。

于 2009-08-06T14:29:05.413 に答える
2

NetworkStreamクラスにはイベントはありません( MSDNを参照)。NetworkStreamから継承するStreamため、イベントに基づかないストリームモデルに従います。非同期でデータを受信する必要がある場合は、このBeginRead方法を使用してください

于 2009-08-06T10:07:56.347 に答える