C# 串口:一到字节就读取 我需要编写一个应用程序,该应用程序可以在PC机上运行的应用程序(第三方、无源)和连接到它的串行设备(例如COM1)之间进行串行通信。

C# 串口:一到字节就读取 我需要编写一个应用程序,该应用程序可以在PC机上运行的应用程序(第三方、无源)和连接到它的串行设备(例如COM1)之间进行串行通信。,c#,windows,winapi,C#,Windows,Winapi,通常,只要插入电缆,应用程序就会与设备通信。我需要做的是通过在中间安装“我的应用程序”来打破这种沟通,这样我就可以控制哪些数据通过。 解决这个问题的唯一方法是使用com0com创建一对虚拟串行端口(COM5COM6)。然后我会重定向应用程序使用COM5而不是COM1(我可以在应用程序选项中设置),然后编写一个程序,将COM6(由应用程序发送)中接收到的每个字节复制到COM1(发送到设备)中,反之亦然 问题是,我需要在不向通信引入任何延迟的情况下执行此操作,否则应用程序和设备将不同步 我尝试创建一

通常,只要插入电缆,应用程序就会与设备通信。我需要做的是通过在中间安装“我的应用程序”来打破这种沟通,这样我就可以控制哪些数据通过。 解决这个问题的唯一方法是使用com0com创建一对虚拟串行端口(COM5COM6)。然后我会重定向应用程序使用COM5而不是COM1(我可以在应用程序选项中设置),然后编写一个程序,将COM6(由应用程序发送)中接收到的每个字节复制到COM1(发送到设备)中,反之亦然

问题是,我需要在不向通信引入任何延迟的情况下执行此操作,否则应用程序和设备将不同步

我尝试创建一个C#控制台应用程序来实现这一点,但它似乎在引发datareceived事件之前等待流中的暂停,从而有效地引入了几毫秒的延迟(速度为9600)

我现在想尝试的是重写程序(可能使用win32 api?),使其在每个rx字节到达时立即进行中继,这样设备就不会注意到任何延迟

我可以用win32做这个吗?你能推荐一个更简单的解决方案吗


谢谢

也许对你的问题没有太多完整的答案,但我认为这可能值得一试

根据您的需要(您没有解释),您可以尝试与com0com一起使用。你可以看到一个简单的例子

还有一个开源软件,但我认为你需要的功能(转发)从未实现过

无论如何,Termite允许编写脚本,因此它很可能满足您的需要。

对于win32 API,您可以使用它。例如,
HANDLE hPort=CreateFile(L“COM1”,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL)您需要设置-如果应用程序将
ReadIntervalTimeout
readTotalTimeOut乘数
设置为
MAXDWORD
并将
ReadTotalTimeoutConstant
设置为大于零且小于MAXDWORD的值,调用ReadFile函数时会发生以下情况之一:如果输入缓冲区中有任何字节,
ReadFile
会立即返回缓冲区中的字节。