加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:14:40 所属栏目:百科 来源:网络整理
导读:虽然c#不是我的主要编程语言,但我现在正在维护这样一个程序几年.此程序连接到串行端口上的设备,从 Windows XP到8.1.一个特定的“功能”是它使用.NET Framework 2.0. 有些用户升级到Windows 10,我们抱怨程序无法检测/打开设备的COM端口.我们已经在我们自己的
虽然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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读