c# – SerialPort.GetPortNames()返回错误的端口名称

前端之家收集整理的这篇文章主要介绍了c# – SerialPort.GetPortNames()返回错误的端口名称前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
虽然c#不是我的主要编程语言,但我现在正在维护这样一个程序几年.此程序连接到串行端口上的设备,从 Windows XP到8.1.一个特定的“功能”是它使用.NET Framework 2.0.

有些用户升级到Windows 10,我们抱怨程序无法检测/打开设备的COM端口.我们已经在我们自己的测试系统上使用干净的Win10安装确认了这一点

事实证明,函数SerialPort.GetPortNames()返回错误的端口名称,并在端口名称添加“奇怪”字符.
例如:

>COM3吀
>COM3䡢
>COM3゠

等等.当我刷新列表时,每次在数字后面显示另一个字符(或两个).
测试代码非常简单:

string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
  log("Available ports:");
  foreach (string PortAvailable in portNames)
  {
    log(PortAvailable);
  }

日志函数会在表单上的标准TextBox添加一行:

txtLog.Text += Msg + Environment.NewLine;

这适用于所有其他Windows版本.
我已经检查了注册表,所有看起来都很好.
有人对此有所了解吗?

我怀疑.NET Framework 2.0不再是100%兼容的,虽然你可以在Windows功能中启用它,但似乎程序本身运行正常(除了我的串口问题).我有点害怕升级到更新的.NET,更不用说我们使用VisualStudio 2008 for c#(max = .NET 3.5).请注意,程序仍然需要在Windows XP上运行(POS版本仍由Microsoft维护).

添加
我已经将测试程序“升级”为.NET 3.5,但仍然存在完全相同的问题.
下一步是安装一个新的VisualStudio(它现在似乎是免费的?我应该检查Studio中的隐私设置吗?;-).

增加2:
安装了VisualStudio 2015,并使用不同的.NET框架版本进行了多个构建. v2.0和3.5仍然添加了奇怪的字符.但是在v4.0及以上这个问题似乎已经解决了!现在,为原始程序编译并为更新的Framework工作.
但是我发现这个问题非常奇怪,并且预计这将会影响更多.NET函数和更多程序.

解决方法

我也见过这些奇怪的人物.我的解决方案是使用正则表达式过滤掉通信端口名称的数字部分.
Dim ports As New Devices.Ports
For Each s As String In ports.SerialPortNames
    s = Regex.Replace(s,"\D*(\d+)\D*","$1")
    Debug.WriteLine(s)
Next
原文链接:https://www.f2er.com/csharp/100550.html

猜你在找的C#相关文章