2011-03-16 504 views
2

我有两台设备将数据流式传输到我的应用程序。一台设备持续以1个数据包的速率将每个以'\ r \ n'结尾的9字节数据包流传送到COM1。只有当设备被触发时,第二台设备才会向COM3发送一个以'\ r \ n'结尾的38字节数据包。使用SerialDataReceivedEventHandler读取多个串行端口的问题

每个都有一个完全不同的SerialDataReceivedEventHandler,每个都运行在它自己的dll中,将它们放在不同的线程中。

COM1 SerialDataReceivedEventHandler总是运​​行良好。

如果没有数据流入COM1,COM3 SerialDataReceivedEventHandler将运行良好。

然而,当COM1 SerialDataReceivedEventHandler正在操作并且COM3 SerialDataReceivedEventHandler工作时,COM1 SerialDataReceivedEventHandler立即在数据可用,但COM3 SerialDataReceivedEventHandler占用12秒的时候,数据是可用的消防火灾。

COM1 SerialDataReceivedEventHandler是否保持COM3 SerialDataReceivedEventHandler不被触发?或者在SerialDataReceivedEventHandler引擎下可能发生其他事情?有任何想法吗?

+0

使用某种USB版本?用你的车跑过去,从另一个供应商处得到另一个。 – 2011-03-17 00:39:22

回答

3

默认情况下,COM1和COM3都使用相同的中断线在数据显示时发出信号,假设这些是真实的串行端口。你能配置其中一个端口是COM2还是COM4? COM1 & COM3既份额IRQ 4而COM2 & COM4 IRQ共享3.

您可以看一下这个设备管理器(可以运行devmgmt.msc启动它)。

+0

+1尼斯回答 – 2011-03-17 03:42:19

+0

COM1是大规模的数据输入,被用于标签印刷输出COM2,COM3和COM4是扫描仪的数据输入 – Rich 2011-03-17 12:12:16

+0

我试图改变上COM3与COM4的中断在设备管理器,但它并没有任何区别。如果我从COM1运行两个超级终端读取实例并从COM3运行另一个读取实例,则看不到任何收到的数据延迟。在我看来,问题在于SerialDataReceivedEventHandlers。 – Rich 2011-03-17 12:21:42