好的,所以我有点困惑,为什么我无法在任何地方找到它,或者如果它不存在那么为什么微软没有实现呢?
所以这是我的场景,我有一个NetworkStream,它有一个名为DataAvailable的可爱的小布尔,我需要的是一个事件,跳出来说“嘿,有可用的数据!” (因为我很懒,而且我宁愿被告知有数据可用,而不是继续问“好吧,有没有可用的数据?”一遍又一遍,直到我收到回复“实际上,这次有”)。
一些类似的SerialPort(它有一个很好的事件(DataReceived),通知我从端口接收数据)本来不错。但我正在使用带有NetworkStream的Socket。
如果有一些显而易见的东西我错过了,请指出正确的方向,但如果没有,这是否意味着我将不得不在DataAvailable属性上使用一些数据绑定,并且当它设置为true时,打电话给我自己的'自制'活动/功能?如果这样你可以请给我一个小例子让球滚动?
修改的
我的完美答案是有人来和我解释如何找到/创建与SerialPort使用的DataReceived事件非常相似的东西,但是为通过NetworkStream流式传输的Socket实现了!
再次感谢,谢谢。
答案 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
方法