gpt4 book ai didi

c# - SerialPort.GetPortNames() 返回不正确的端口名称

转载 作者:太空狗 更新时间:2023-10-29 18:24:40 31 4
gpt4 key购买 nike

虽然 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);
}

日志函数只是向表单上的标准文本框添加一行:

  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 及更高版本中,这个问题似乎得到了解决!现在让原始程序编译并为更新的框架工作。但我发现这个问题真的很奇怪,并希望这会影响更多的 .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

关于c# - SerialPort.GetPortNames() 返回不正确的端口名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040209/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com