我在PDA设备的CF应用程序中检测插座连接丢失有问题。我有一个静态类,它具有用于通信的静态方法(Connect(), Write(), Disconnect())。静态是因为所有表单都可以调用Write方法。
在连接方法中,我调用socket.Connect(ipEndpoint);但是当设备没有wifi连接时,程序会在这条线上停留大约20秒,这太长了。此外,如果用户启动Write()方法(保存一些数据)和wifi连接丢失,用户无法与表单交互,并认为应用程序崩溃。由于CF套接字连接没有超时选项,那么控制套接字行为的最佳方法是什么?我的想法是显示某种"通信形式"时,套接字不响应5秒,这将试图重新建立连接。这个表单将有图形指示器(旋转时钟或类似的东西),以显示用户,程序正在尝试连接和退出按钮,如果用户决定退出应用程序。连接成功,我将显示最后使用的表单给用户。我认为这必须用线程完成,但因为我没有经验。我需要帮助如何管理这种行为。
你可以调用Socket.BeginConnect()在后台启动连接。然后,您可以指定当套接字已连接(或超时)时将调用的回调方法。此外,要实现进度条在尝试连接时倒计时,您可以这样做:
IAsyncResult ar = moSocket.BeginConnect(...)
然后你可以让你的连接表单使用计时器倒计时,通过调用
检查连接状态:ar.IsComplete
轮询不是很有效,但在这种情况下,它可以很好地与您描述的弹出式连接表单一起工作。