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

时间:2009-08-06 10:01:16

标签: c# .net sockets serial-port networkstream

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

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

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

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

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

再次感谢,谢谢。

2 个答案:

答案 0 :(得分:7)

只是为了澄清托马斯的回答,并为那些不熟悉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事件的工作方式非常相似。

答案 1 :(得分:2)

NetworkStream班(see MSDN)中没有任何活动。 NetworkStream继承自Stream,因此它遵循流模型,而不是基于事件。如果需要异步接收数据,请使用BeginRead方法