Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SerialDataReceivedEventHandler读取多个串行端口时出现问题_C#_Serial Port - Fatal编程技术网

C# 使用SerialDataReceivedEventHandler读取多个串行端口时出现问题

C# 使用SerialDataReceivedEventHandler读取多个串行端口时出现问题,c#,serial-port,C#,Serial Port,我有两个设备将数据流传输到我的应用程序。一个设备,以每50毫秒1个数据包的速率将以“\r\n”结尾的9字节数据包连续传输到COM1。只有在触发设备时,第二个设备才会向COM3发送以“\r\n”结尾的38字节数据包 每个都有一个完全不同的SerialDataReceiveDevenHandler,每个都在自己的dll中运行,并将它们放在不同的线程中 COM1 SerialDataReceivedEventHandler始终性能良好 如果没有数据流入COM1,则COM3 SerialDataRece

我有两个设备将数据流传输到我的应用程序。一个设备,以每50毫秒1个数据包的速率将以“\r\n”结尾的9字节数据包连续传输到COM1。只有在触发设备时,第二个设备才会向COM3发送以“\r\n”结尾的38字节数据包

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

COM1 SerialDataReceivedEventHandler始终性能良好

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

但是,当COM1 SerialDataReceiveDeventhadler正在运行且COM3 SerialDataReceiveDeventhadler正在运行时,当数据可用时,COM1 SerialDataReceiveDeventhadler会立即启动,但当数据可用时,COM3 SerialDataReceiveDeventhadler最多需要12秒启动


COM1 SerialDataReceivedEventHandler是否阻止COM3 SerialDataReceivedEventHandler开火?或者在SerialDataReceivedVenthandler引擎盖下发生了其他事情?有什么想法吗

默认情况下,COM1和COM3都使用相同的中断线在数据显示时发出信号,假设它们是真正的串行端口。您可以将其中一个端口配置为COM2或COM4吗?COM1和COM3都共享IRQ 4,而COM2和COM4共享IRQ 3


您可以使用设备管理器查看此问题(您可以运行devmgmt.msc启动它)。

使用某种USB版本?用你的车检查一下,从另一个供应商处获取另一个。COM1是刻度数据输入,COM2用于标签打印输出,COM3和COM4是扫描仪数据输入。我曾尝试在设备管理器中更改COM3和COM4上的中断,但没有任何区别。如果我运行两个超级终端实例,一个从COM1读取,另一个从COM3读取,我看不到收到的数据有任何延迟。在我看来,问题在于SerialDataReceivedEventHandler。CPU的使用情况如何?你饿了吗?您是否正在进行阻止其他线程运行的轮询?看起来它最终是计算机硬件。根据电子制造商的说法,这台计算机使用的是残废版本的IBM主板和BIOS,因此无法足够快地处理中断。我添加了一个MOXA串行到USB转换器,我的代码现在可以很好地处理所有串行输入。