那么如何通过代码获取当前可用串口列表是通种注册表获取,操作比较复杂;微软为我们提供更简单的方式,通过SerialPort.GetPortNames()方法获取串口列表。使用时需要引用using System.IO.Ports;名字空间。代码如下:
/// <summary>
/// 构造函数
/// </summary>
public MainForm()
{
InitializeComponent();
GetSerialLstTbl();
}
/// <summary>
/// 获取串口列表
/// </summary>
private void GetSerialLstTbl()
{
//string[] serialLst = SerialPort.GetPortNames();
if (serialLst.Length > 0)
{
//
comboBoxExUartNum.SelectedIndex = 0; } }
实现上述的前提是必需先插上串口再启动软件,那么问题又来了,如果先启动软件再插上串口软件并不能检测出接入的串口。解决方法是捕获设备热插拔时public const int WM_DEVICE_CHANGE = 0x219; //public const int DBT_DEVICE_REMOVE_COMPLETE = 0x8004; //protected override void WndProc(ref Message m)
{
switch (m.Msg) //
GetSerialLstTbl(); // 上述的实现方法还是比较粗略,因为只要是带USB接口的设备进行热插拔都会重新获取串口列。如果串口正在发送或者接收时进行热插拔,程序将抛出异常.此时可以将串口先关闭再重新获取串口列表. 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!