Tag: winsockets

如何在Socket类中使用数据接收事件?

我写了一个简单的客户端,在dotnet中使用TcpClient进行通信。 为了等待来自服务器的数据消息,我使用一个在socket上使用阻塞Read()调用的Read()线程。 当我收到的东西,我必须生成各种事件。 这些事件发生在工作线程中,因此您无法直接从其更新UI。 Invoke()可以使用,但对于最终开发人员来说很困难,因为我的SDK可能会被完全不使用UI或使用Presentation Framework的用户使用。 演示框架有不同的处理方式。 在我们的测试应用程序上Invoke() ,因为Microstation Addin需要花费大量时间。 Microstation是单线程应用程序,并且其线程上的调用调用并不好,因为它总是忙于绘图和其他东西消息需要很长时间才能处理。 我希望我的事件在与UI相同的线程中生成,因此用户不必通过Dispatcher或Invoke 。 现在我想知道当数据到达时如何通过套接字通知我? 是否有一个内置的回调。 我喜欢winsock样式接收事件而不使用单独的读取线程。 我也不想使用窗口计时器来轮询数据。 我在IOControl()函数中找到了IOControlCode.AsyncIO标志 启用等待接收数据的通知。 该值等于Winsock 2 FIOASYNC常量。 我找不到任何关于如何使用它来获取通知的示例。 如果我在MFC / Winsock中是正确的,我们必须创建一个size(0,0)的窗口,该窗口仅用于监听数据接收事件或其他套接字事件。 但我不知道如何在dotnet应用程序中这样做。