.net 为什么这个microsoft异步服务器示例在不应该的情况下会阻塞?

.net 为什么这个microsoft异步服务器示例在不应该的情况下会阻塞?,.net,vb.net,.net,Vb.net,我是VB.net和socket编程新手,这是一个新手问题,所以请友好:) 我已经读了十几篇关于创建一个简单的异步聊天服务器(如应用程序)的文章。我仍然处于在.net中学习该模型的早期阶段,尽管我对编程并不陌生 它应该是一个异步服务器,用于侦听客户端的连接,但当我将vb.net表单中的代码复制并粘贴到窗口加载的事件处理程序中时,它会阻止我的GUI。我不明白为什么。它应该是异步的。在我将客户端代码粘贴到另一个vb.net表单并运行它之前,该窗口不会显示。然后,服务器上的GUi显示:( 谢谢看到主线程

我是VB.net和socket编程新手,这是一个新手问题,所以请友好:)

我已经读了十几篇关于创建一个简单的异步聊天服务器(如应用程序)的文章。我仍然处于在.net中学习该模型的早期阶段,尽管我对编程并不陌生

它应该是一个异步服务器,用于侦听客户端的连接,但当我将vb.net表单中的代码复制并粘贴到窗口加载的事件处理程序中时,它会阻止我的GUI。我不明白为什么。它应该是异步的。在我将客户端代码粘贴到另一个vb.net表单并运行它之前,该窗口不会显示。然后,服务器上的GUi显示:(

谢谢

看到主线程中调用的
while(true)
了吗


它仍然是异步的。问题是什么与什么是异步的。有一个主方法协调套接字,IO实际上与它是异步的。但是该方法本身不一定与调用它的代码是异步的。

不要在UI线程上调用
StartListening
。或者从新线程调用它或者重写它以使用UI线程模型。然后它将按预期异步运行(但可能会遇到新问题,如跨线程访问)


请注意,在本例中,对
StartListening()
的调用永远不会返回,否则程序将立即退出。也就是说,本例演示了异步操作的使用,但将这些操作包装为“同步”控制台程序。毕竟,它是一个示例,而不是设计用于直接组合的组件。

我怀疑它们在代码中阻塞的示例有限,如果我回家时您没有收到响应,我将弹出窗口,完整回答正在发生的事。但我建议通读while(true)循环并查找一些阻止代码。但是BeginAccept方法应该是异步的。这太烦人了,Microsoft编写了一个名为asynchronous的完整示例,但它不是asynchronous!谢谢。我在Window Loaded方法中启动了一个新线程,并开始侦听该线程。工作很好:)@iAteABug_,我觉得很酷。我不能保证如果从那访问UI组件会发生什么,但是对于这些问题,应该有很多相关的问题。说到这一点,我会跨越这座桥:)现在它比美人鱼胸罩更符合我的目的。