C# 远程桌面会话上的.NET串行端口起始阻塞
我正在对一个应用程序的问题进行故障排除,该应用程序监视一个COM端口,当我试图关闭该端口时,应用程序挂起。在我自己的机器上,它关闭得很好。我正在终端服务器上测试这个应用程序,我有通过远程桌面共享的COM端口。通过远程桌面会话,应用程序无限挂起,也无法通过任务管理器结束进程关闭 监控的基本代码结构在vb.net中,我使用的是System.IO.Ports.SerialPort。它使用SerialPort.BaseStream.BeginRead和SerialPort.BaseStream.EndRead作为从端口获取信息的方法。它使用带有回调的操作无限地调用这些方法,直到出现CancellationToken.IsCancellationRequested中断进程C# 远程桌面会话上的.NET串行端口起始阻塞,c#,vb.net,C#,Vb.net,我正在对一个应用程序的问题进行故障排除,该应用程序监视一个COM端口,当我试图关闭该端口时,应用程序挂起。在我自己的机器上,它关闭得很好。我正在终端服务器上测试这个应用程序,我有通过远程桌面共享的COM端口。通过远程桌面会话,应用程序无限挂起,也无法通过任务管理器结束进程关闭 监控的基本代码结构在vb.net中,我使用的是System.IO.Ports.SerialPort。它使用SerialPort.BaseStream.BeginRead和SerialPort.BaseStream.EndR
结果是,当我试图通过CancellationToken.cancel取消循环时,BeginRead方法已经被阻塞,我的取消无法通过。我发现SerialPort类内置的ReadTimeout设置不适用于BaseStream.BeginRead。这只是远程桌面会话中的一个问题。远程服务器的操作系统是Windows server 2008 R2标准。我尝试过使用windows 8操作系统的其他远程服务器,但这些服务器没有问题。在这种情况下,internet没有帮助,但经过多次修补,我发现了一种解决问题的方法 最后,在调用CancellationToken.Cancel之前,我需要调用SerialPort.DiscardInBuffer 希望这对将来的其他人有所帮助