Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# 远程桌面会话上的.NET串行端口起始阻塞_C#_Vb.net - Fatal编程技术网

C# 远程桌面会话上的.NET串行端口起始阻塞

C# 远程桌面会话上的.NET串行端口起始阻塞,c#,vb.net,C#,Vb.net,我正在对一个应用程序的问题进行故障排除,该应用程序监视一个COM端口,当我试图关闭该端口时,应用程序挂起。在我自己的机器上,它关闭得很好。我正在终端服务器上测试这个应用程序,我有通过远程桌面共享的COM端口。通过远程桌面会话,应用程序无限挂起,也无法通过任务管理器结束进程关闭 监控的基本代码结构在vb.net中,我使用的是System.IO.Ports.SerialPort。它使用SerialPort.BaseStream.BeginRead和SerialPort.BaseStream.EndR

我正在对一个应用程序的问题进行故障排除,该应用程序监视一个COM端口,当我试图关闭该端口时,应用程序挂起。在我自己的机器上,它关闭得很好。我正在终端服务器上测试这个应用程序,我有通过远程桌面共享的COM端口。通过远程桌面会话,应用程序无限挂起,也无法通过任务管理器结束进程关闭

监控的基本代码结构在vb.net中,我使用的是System.IO.Ports.SerialPort。它使用SerialPort.BaseStream.BeginRead和SerialPort.BaseStream.EndRead作为从端口获取信息的方法。它使用带有回调的操作无限地调用这些方法,直到出现CancellationToken.IsCancellationRequested中断进程


结果是,当我试图通过CancellationToken.cancel取消循环时,BeginRead方法已经被阻塞,我的取消无法通过。我发现SerialPort类内置的ReadTimeout设置不适用于BaseStream.BeginRead。这只是远程桌面会话中的一个问题。远程服务器的操作系统是Windows server 2008 R2标准。我尝试过使用windows 8操作系统的其他远程服务器,但这些服务器没有问题。

在这种情况下,internet没有帮助,但经过多次修补,我发现了一种解决问题的方法

最后,在调用CancellationToken.Cancel之前,我需要调用SerialPort.DiscardInBuffer

希望这对将来的其他人有所帮助