【问题标题】:System.IO.Ports.SerialPort Write() TimeoutSystem.IO.Ports.SerialPort Write() 超时
【发布时间】:2010-08-13 13:40:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# networking bluetooth timeoutexception


    【解决方案1】:

    没有。串行连接是无状态的

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

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

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

    【讨论】:

    • 我不知道对此有何感想......考虑到我不知道自己在做什么,我实际上有“正确”的解决方案真是太好了。它没有让我到达我想要的地方,这一事实不那么令人鼓舞。但我会试一试背景工作,看看是否能缓解我的问题。
    猜你喜欢
    • 2018-05-02
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2010-10-04
    • 2010-10-14
    相关资源
    最近更新 更多