使用C#编程很多年了,大部分功能都是基于串口来开发的,毕竟串口也是面对下位机硬件调试中最为简便的方法。
不过,如果系统中有多个串口的时候,就会遇到一定的麻烦,比如我的电脑设备中就存在多个串口:
我早先时候,习惯使用IO.Ports命名空间的API来获取端口信息,就像下面这段代码
Int32 port_name_len = System.IO.Ports.SerialPort.GetPortNames().Length;
cbBoxCom.Items.Clear();//清空下拉列表
if (port_name_len != 0)//系统当前存在的端口加入列表
{
for(int i = 0; i < port_name_len;i++)
Trace.WriteLine(System.IO.Ports.SerialPort.GetPortNames()[i]);
foreach (string com in System.IO.Ports.SerialPort.GetPortNames())
{
cbBoxCom.Items.Add(com);
}
cbBoxCom.SelectedIndex = 0; // 选中列表中的第一个端口
}
else
{
MessageBox.Show("没有检测到设备,请插入设备重新启动。");
cbBoxCom.Items.Add("no port");
}
try
{
// 定义查询 WMI 的语句
string query = "SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(COM%'";
// 使用 ManagementObjectSearcher 查询设备
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
foreach (ManagementObject obj in searcher.Get())
{
// 获取设备描述
string name = obj["Name"]?.ToString() ?? "未知设备";
string manufacturer = obj["Manufacturer"]?.ToString() ?? "未知厂商";
cBoxComNum.Items.Add(GetComx(name));
//Trace.WriteLine($"设备描述: {name}");
//Trace.WriteLine($"厂商: {manufacturer}");
//Trace.WriteLine(new string('-', 50));
}
}
AdjustDropDownWidth(cBoxComNum);
cBoxComNum.SelectedIndex = 0; //选中第一个
cBoxBaudrate.Items.Add(115200);
cBoxBaudrate.Items.Add(9600);
}
catch (Exception ex)
{
Trace.WriteLine($"发生错误: {ex.Message}");
}