NetworkStream,是否有类似于SerialPort接收的数据?(C#)
好吧,我有点困惑,为什么我在任何地方都找不到这个,或者如果它不存在,那么为什么微软没有实现它 这里是我的场景,我有一个NetworkStream,它有一个可爱的小布尔值叫做DataAvailable,我需要的是一个事件,它跳出来说“嘿,有数据可供您使用!”(因为我很懒,我宁愿被告知有数据可用,而不是一直问“好吧,有数据可用吗?”一次又一次,直到我得到回答“实际上,这次有”) 类似于SerialPort的东西(它有一个nice事件(DataReceived),善意地通知我正在从端口接收数据)会很好。但是我正在使用一个带有网络流的套接字 如果我明显缺少某些东西,请为我指出正确的方向,但如果没有,这是否意味着我必须在DataAvailable属性上使用一些数据绑定,并且当它设置为true时,调用我自己的“自制”事件/函数?如果是这样的话,你能给我举个小例子让事情顺利进行吗 编辑NetworkStream,是否有类似于SerialPort接收的数据?(C#),c#,.net,sockets,serial-port,networkstream,C#,.net,Sockets,Serial Port,Networkstream,好吧,我有点困惑,为什么我在任何地方都找不到这个,或者如果它不存在,那么为什么微软没有实现它 这里是我的场景,我有一个NetworkStream,它有一个可爱的小布尔值叫做DataAvailable,我需要的是一个事件,它跳出来说“嘿,有数据可供您使用!”(因为我很懒,我宁愿被告知有数据可用,而不是一直问“好吧,有数据可用吗?”一次又一次,直到我得到回答“实际上,这次有”) 类似于SerialPort的东西(它有一个nice事件(DataReceived),善意地通知我正在从端口接收数据)会很好
我的完美答案是有人来向我解释我如何找到/创建与SerialPort使用的DataReceived事件极其相似的东西,但它是为通过NetworkStream流式传输的套接字实现的
再次提前感谢,非常感谢。网络流中没有事件。类()<代码>网络流继承自
流
,因此它遵循不基于事件的流模型。如果您需要异步接收数据,请使用BeginRead
方法来澄清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事件的工作方式非常相似。值得指出的是,您仍然需要调用.EndRead方法来正确完成读取过程并获取数据。