关闭断开的连接

时间:2015-03-04 08:10:06

标签: .net serial-port

我有一个VB.NET应用程序,通过蓝牙定期与某些设备通信(使用System.IO.Ports.SerialPort)。定期表示应用程序以1秒的间隔向设备发送请求。

一切都很完美(打开/关闭连接,数据发送/接收)但有一个我不知道要处理的用例。用例是指连接中断(设备已关闭,电池已耗尽,设备已移出范围......)。

如何使用.NET查明连接是否中断是没有办法的。如果设备没有向我的请求发送响应,我认为连接已断开。然后我运行这段代码:

Try
    If (sp.IsOpen) Then sp.Close()
Catch ex As Exception
    ' do something
End Try

当然,属性IsOpen会返回true,即使连接已断开,因为它已在物理上断开连接,SerialPort仅在调用Close()后才更改属性。所以sp.Close()被执行但它当然会触发IOException(没有进程在管道的另一端)。没关系,它由Try-Catch处理。

问题是,当应用程序尝试关闭连接时,它会冻结几秒钟然后触发异常。有没有办法检查连接是否被破坏以避免冻结应用程序?在我看来,不是一个最好的解决方案来制作一个分离的线程来关闭。我的意见是我应该检查一个串口的状态......谢谢

0 个答案:

没有答案