public SerialPortManager(SerialPortSetting setting) { this.PortSetting.AssignFrom(setting.ToString()); InitSerialPort(); }
/// <summary> /// 从CSV 字符串中读取串口配置 /// "COM1,9600,8,1,1" /// $"{settings.PortName},{settings.BaudRate},{settings.DataBits},{settings.StopBits},{settings.Parity}" /// </summary> /// <param name="setting"></param> /// <param name="settingParam"></param> /// <returns></returns> public static SerialPortSetting AssignFrom(this SerialPortSetting setting, string settingParam) { if (string.IsNullOrEmpty(settingParam)) { //返回默认值 return(setting); } if (string.Equals(setting.ToString(), settingParam)) { //setting 没有变化 return(setting); } if (settingParam.Contains(",")) { var values = settingParam.Split(','); for (int i = 0; i < values.Length; i++) { var val = values[i]; if (string.IsNullOrEmpty(val)) { continue; } switch (i) { case 0: setting.PortName = val; break; case 1: setting.SetProperty(s => s.BaudRate, val); break; case 2: setting.SetProperty(s => s.DataBits, val); break; case 3: setting.SetProperty(s => s.StopBits, val); break; case 4: setting.SetProperty(s => s.Parity, val); break; case 5: setting.SetProperty(s => s.Handshake, val); break; default: if (string.Equals(val, "DTR", StringComparison.CurrentCultureIgnoreCase)) { setting.Dtr = true; } if (string.Equals(val, "RTS", StringComparison.CurrentCultureIgnoreCase)) { setting.Rts = true; } break; } } } else { if (SerialPort.GetPortNames().Contains(settingParam)) { setting.PortName = settingParam; } } setting.RasieOnChanged(); return(setting); }