6

好的,所以我有点困惑,为什么我在任何地方都找不到它,或者如果它不存在,那么为什么微软没有实现它?

所以这是我的场景,我有一个 NetworkStream,它有一个可爱的小布尔值,称为 DataAvailable,我需要的是一个事件,它会跳出并说“嘿,有可用的数据!” (因为我很懒,我宁愿被告知有可用的数据,也不愿一遍又一遍地问“好吧,有可用的数据吗?”直到我得到回应“实际上,这次有”)。

类似于 SerialPort 的东西(它有一个很好的事件(DataReceived),它告诉我正在从端口接收数据)会很好。但我正在使用带有 NetworkStream 的套接字。

如果我缺少明显的东西,请指出正确的方向,但如果没有,这是否意味着我将不得不在 DataAvailable 属性上使用一些数据绑定,并且当它设置为 true 时,调用我的自己的“自制”活动/功能?如果这将是方式,你能给我一个小例子来让球滚动吗?

编辑
我的完美答案是有人过来向我解释我如何找到/创建与 SerialPort 使用的 DataReceived 事件极为相似的东西,但为通过 NetworkStream 流式传输的 Socket 实现!

再次提前感谢,感谢。

4

2 回答 2

7

只是为了澄清 Thomas 的答案,并为不熟悉 BeginRead 方法并想了解此问题答案的任何人提供解释,您可以致电:

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

然后创建 DataReceived 函数:

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

这将调用 DataReceived 非常类似于 SerialPort.DataReceived 事件的工作方式。

于 2009-08-06T14:29:05.413 回答
2

类中没有事件NetworkStream请参阅 MSDN)。NetworkStream继承自Stream,因此它遵循不基于事件的流模型。如果需要异步接收数据,使用BeginRead方法

于 2009-08-06T10:07:56.347 回答