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