NetworkStream,是否有类似于SerialPort的DataReceived?(C#)

Llo*_*ell 6 .net c# sockets serial-port networkstream

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

所以这是我的场景,我有一个NetworkStream,它有一个名为DataAvailable的可爱的小布尔,我需要的是一个事件,跳出来说"嘿,有数据可供你使用!" (因为我很懒,而且我宁愿被告知有数据可用,而不是继续问"好吧,有没有可用的数据?"一遍又一遍,直到我收到回复"实际上,这次有").

类似于SerialPort(它有一个很好的事件(DataReceived),它通知我从端口接收数据)会很不错.但我正在使用带有NetworkStream的Socket.

如果有一些显而易见的东西我错过了,请指出正确的方向,但如果没有,这是否意味着我将不得不在DataAvailable属性上使用一些数据绑定,当它设置为true时,调用我的拥有'自制'活动/功能?如果这样的话,请你给我一个小例子让球滚动?

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

再次感谢,谢谢.

Llo*_*ell 7

只是为了澄清托马斯的答案,并解释任何不熟悉BeginRead方法的人并且想要理解这个问题的答案,你可以打电话:

AsyncCallBack MyCallBack = new AsynCallBack(DataReceived);
networkStream.BeginRead(buffer, offset, size, MyCallBack, MyObject);
Run Code Online (Sandbox Code Playgroud)

然后创建DataReceived函数:

private void DataReceived(IAsynResult result)
  {
  //call receive functionality
  }
Run Code Online (Sandbox Code Playgroud)

这将调用DataReceived与SerialPort.DataReceived事件的工作方式非常相似.

  • 值得指出的是,您仍然需要调用.EndRead方法来正确完成读取过程并获取数据. (5认同)

Tho*_*que 2

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