【问题标题】:Compact framework socket timeout紧凑框架套接字超时
【发布时间】:2012-01-26 16:57:48
【问题描述】:

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

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

【问题讨论】:

    标签: multithreading sockets compact-framework timeout connection


    【解决方案1】:

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

    IAsyncResult ar = moSocket.BeginConnect(...)
    

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

    ar.IsComplete
    

    轮询效率不是很高,但在这种情况下,它与您描述的弹出连接表单配合得很好。

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多