紧凑的框架套接字超时

时间:2011-12-23 09:25:07

标签: multithreading sockets compact-framework timeout connection

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

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

1 个答案:

答案 0 :(得分:0)

您可以调用Socket.BeginConnect()在后台启动连接。然后,您可以指定在套接字连接(或超时)时将调用的回调方法。此外,要在尝试连接时实现进度条倒计时,您可以执行以下操作:

IAsyncResult ar = moSocket.BeginConnect(...)

然后你可以让你的连接表使用计时器倒计时,通过调用来检查连接的状态:

ar.IsComplete

轮询效率不高,但在这种情况下,它适用于您描述的弹出连接表单。