2011-12-23 103 views
0

我有问题检测PDA设备的CF应用程序中的套接字连接丢失。 我有静态类的静态方法进行通信(Connect(),Write(),Disconnect())。静态,因为所有表单都可以调用Write方法。紧凑框架套接字超时

在Connect方法中,我调用socket.Connect(ipEndpoint); 但是,当设备没有得到WiFi连接程序停止在这条线约20秒太长。此外,如果用户启动Write()方法(保存一些数据)并且WiFi连接丢失,用户将无法与表单交互,并认为应用程序已被修改。由于CF套接字连接没有超时选项,因此控制套接字行为的最佳方法是什么? 我的想法是显示某种“沟通形式”,当套接字不响应5秒钟将尝试重新建立连接。如果用户决定退出应用程序,此表单将具有图形指示器(旋转时钟或类似的东西)以向用户显示程序正试图连接并退出按钮。如果socket.connect成功,我将向用户显示上次使用的表单。 我认为这必须由线程来完成,但因为我没有经验。我需要帮助如何管理这种行为。

回答

0

您可以调用Socket.BeginConnect()以在后台启动连接。然后,您可以指定将在套接字连接(或超时)时调用的回调方法。此外,为实现你的进度条显示倒计时,因为它试图连接,你可以这样做:通过调用

IAsyncResult ar = moSocket.BeginConnect(...) 

然后你可以有你的连接形式使用计时器倒计时,检查连接的状态:

ar.IsComplete 

轮询效率不是很高,但在这种情况下,它与您描述的弹出式连接形式很好地结合。