0

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

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

这意味着如果两个设备没有立即连接,它必须抛出一个TimeoutException,它会一次又一次地继续抛出它,直到它们正确连接。这是完全不能接受的。它将程序减慢到无法使用的程度,并在调试输出中乱扔“TimeoutException Thrown Here”错误消息。

有没有更好的解决方案来解决这个问题?如果我可以确认两个设备已连接,我可以通过某种方式让它只写出数据,而无需不断检查(随后在检查时出现超时错误)。

4

1 回答 1

1

不,串行连接是无状态的。

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

最简单的例子是老式模拟调制解调器。要确定它是否已连接,请发送 aAT并检查 a 是否OK返回。

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

于 2010-08-13T14:04:01.163 回答