【问题标题】:How can I listen to multiple Serial Ports asynchronously in C#如何在 C# 中异步监听多个串行端口
【发布时间】:2010-04-14 01:30:46
【问题描述】:

我有一个应用程序可以监听 USB 到串行转换器上的硬件。我的应用程序应该同时监控多个串口。

我循环我需要监听的串行端口,并为每个端口创建一个线程。在线程中,我有我的数据处理例程。

当我分配一个端口时,它运行完美。当我听另一个时,它也有效。然而,当我打开两个端口时,第二个端口在调用serialPort.Open() 时总是抛出UnauthorizedAccessException。我打开端口的顺序无关紧要,第二个总是失败。

我在 while 循环中使用 serialPort.ReadLine() 监听端口。

.NET 可以同时打开多个端口吗?两个都可以听吗?或者我应该使用另一种(线程安全的?)方式来访问我的串行端口事件?

【问题讨论】:

  • 我年纪大了,可能在你出生之前就已经在为串口写代码了。所以不要误会,这个“serialPort.ReadLine() in a while loop”。告诉我你还没有完全掌握 datareceived 事件处理程序。当我再次开始编码时,它使用的是 MS Visual Basic,而我编写的第一批软件之一是串行端口处理程序。如果你想看它,请告诉我,它在另一个论坛上。我希望我有时间重新编写它,但我相信它可以与多个串行端口一起使用。我以高达 900Kbps 的速度对其进行了测试。
  • 你是对的,我没有使用该事件并且我知道 :-) 我会,一旦我有机会重构此代码 :-)

标签: c# .net serial-port


【解决方案1】:

异常有一个非常特定的含义,它告诉你有人已经打开了端口。那会是谁?当您打开第二个端口时,请三重检查四次您真的使用不同的端口名称。

下一步是将 USB 仿真器带到停车场,并用您的汽车多次碾过它,这样它就不会再让程序员发疯了。从使用不同设备驱动程序供应商的另一制造商处获取一个。

【讨论】:

  • 停车场的评论帮助了 :-) 原来我的关闭导致同一个端口再次打开。愚蠢的我! :( 谢谢!
  • +1 用于 USB 设备销毁提示。所有 USB 转串口设备绝对不是平等的。
  • 这就是解决方案。如果可以,请始终使用实际设备进行测试。我所做的是运行 2 个 Arduino,每个 Arduino 分别标识自己。帮助我准备代码,最后,我可以简单地转移到实际设备并修复设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
相关资源
最近更新 更多