在PDA设备的CF应用程序中检测套接字连接丢失时出现问题。我有一个静态类,它有用于通信的静态方法(Connect(),Write(),Disconnect())。静态,因为所有窗体都可以调用Write方法。
在Connect方法中,我调用了socket.Connect(ipEndpoint);但是当设备没有wifi连接时,程序会在这一行暂停大约20秒,这太长了。此外,如果用户启动Write()方法(保存一些数据)并且wifi连接丢失,用户将无法与表单交互,并认为应用程序被冻结。由于CF套接字连接没有超时选项,那么控制套接字行为的最佳方法是什么?我的想法是,当socket在5秒内没有响应时,显示某种“通信表单”,它将尝试重新建立连接。这个表单将有图形指示器(旋转时钟或类似的东西),以显示用户,程序正在尝试连接和退出按钮,如果用户决定退出应用程序。我假设这必须使用Thread来完成,但因为我没有使用它的经验。我需要帮助如何管理这种行为。
发布于 2012-01-20 05:22:47
您可以调用Socket.BeginConnect()在后台启动连接。然后,您可以指定将在套接字连接(或超时)时调用的回调方法。此外,要在尝试连接时实现进度条倒计时,您可以执行以下操作:
IAsyncResult ar = moSocket.BeginConnect(...)然后,您可以让您的连接表单使用计时器进行倒计时,通过调用以下命令来检查连接状态:
ar.IsComplete轮询效率不是很高,但在这种情况下,它与您所描述的弹出连接表单配合得很好。
https://stackoverflow.com/questions/8614247
复制相似问题