System.IO.Ports.SerialPort Write()超时

时间:2010-08-13 13:40:05

标签: c# networking bluetooth timeoutexception

我在C#(.Net Framework 2.0)中工作的程序要求切换到“远程模式”并通过蓝牙将ascii数据发送到另一个屏幕。我首先要说的是,我不是一个非常有经验的程序员,我对网络一无所知,但昨天在使用SerialPort课程后,我能够编写一个在两个蓝牙连接设备之间运行良好的聊天程序。

然而,聊天程序仅在用户点击按钮“发送”数据时才发送数据。如果两个设备没有正确连接,我只是抛出一个TimeoutException以及一条错误消息。我现在正在处理的程序要大得多,并且只要它打开COM端口就会尝试不断地写入数据。

这意味着如果两个设备没有立即连接,它必须抛出一个TimeoutException,它将继续一次又一次地抛出它,直到它们正确连接。这是完全不可接受的。它将程序降低到无法使用的程度,并使用“TimeoutException Thrown Here”错误消息来填充Debug输出。

对于如何做到这一点有更好的解决方案吗?如果我可以确认两个设备是否已连接,而不经常检查(并在检查时获得超时错误),我可以通过某种方式将其写入数据。

1 个答案:

答案 0 :(得分:1)

没有。串行连接是无状态

这意味着你不知道是否有人在另一边。所有你能做的就是发送一些东西,看一看有意义的东西回来。

最简单的例子是好的旧模拟调制解调器。要确定它是否已连接,请发送AT并检查OK是否会回来。

所以你的解决方案是正确的,但可能没有正确实施。您应该将连接构建序列放入BackgroundWorker。因此,当您的GUI保持对用户的响应时,这些尝试将在另一个线程中完成。