我正在开发的C# (.Net Framework2.0)程序需要切换到“远程模式”,并通过蓝牙将ascii数据发送到另一个屏幕。我首先要说的是,我不是一个非常有经验的程序员,我对网络也一无所知,但在昨天玩弄了SerialPort类之后,我得以编写了一个小聊天程序,它可以在两个蓝牙连接的设备之间很好地工作。
然而,聊天程序只在用户点击按钮“发送”数据时才发送数据。如果这两个设备没有正确连接,我只是抛出了一个TimeoutException和一条错误消息。我现在正在开发的程序要大得多,只要它的COM端口是打开的,它就会不断地写入数据。
这意味着如果这两个设备没有立即连接,它必须抛出一个TimeoutException,并且它将继续抛出它,一次又一次,直到它们正确连接为止。这是完全不可接受的。它会使程序变慢到不能使用的地步,并且在调试输出中会出现“在这里抛出TimeoutException”的错误消息。
有没有更好的解决方案来解决这个问题呢?通过某种方式,我可以让它只在我确认两个设备连接的情况下才写出数据,而不需要不断地检查(随后在检查时会出现超时错误)。
发布于 2010-08-13 22:04:01
不是的。串行连接是无状态的。
这意味着你不知道是否有人在另一边。你所能做的就是发送一些东西,看看是否有一些有意义的东西回来了。
最简单的例子就是老式的模拟调制解调器。要确定它是否已连接,需要发送AT并检查OK是否返回。
因此,您的解决方案是正确的,但可能没有正确实现。您应该将您的连接建立序列放入BackgroundWorker中。因此,这些尝试将在另一个线程中完成,而您的GUI将保持对用户的响应。
https://stackoverflow.com/questions/3477349
复制相似问题