【发布时间】:2012-04-19 14:31:30
【问题描述】:
我对这个例子有疑问:Asynchronous Client Socket。
它说这些操作是异步的,它们 ARE (出现了beginxxx/endxxx),但它们使用ManualResetEvent,如果我正确理解示例代码 - 这样的调用:
Receive(client);
receiveDone.WaitOne();
会阻塞线程,它们是从被调用的。因此,如果我有一个带有 UI 的应用程序并且我从主线程调用该异步套接字代码 - 应用程序将冻结......或者我错了吗?抱歉,我希望在不冻结主线程的情况下通过 tcp 异步发送/接收一些命令。我是否必须调用该示例中的所有套接字操作以避免冻结?
【问题讨论】:
-
该示例适用于控制台应用程序。我认为这在 GUI 应用程序中更有意义,因为您可以让 Receive 回调绘制更新到视图,并且仅在单击按钮(或其他一些事件)时调用 Send 函数。在这个例子中阻塞的唯一原因是确保连接、发送、接收、关闭的线性事件,并防止程序在回调完成之前退出。
标签: c# sockets asynchronous msdn