Atendiendo a una consulta de los foros de MSDN, me complace compartir con vosotros una solución para asignar los ajustes de apertura del puerto serie al vuelo.

Entendiendo que en algunas situaciones, puede ser ventajoso poder cambiar la velocidad, paridad, bits… etc, ‘On Line’. Aunque para la mayoría de comunicaciones con dispositivos dichos parámetros son ajustados en tiempo de puesta en marcha y no acostumbran a variar en el transcurso del tiempo.
Esperando os sea útil… Saludos,
Pep Lluis,
PD. Si queréis podéis descargaros la solución de ejemplo en ‘attachments’.
using System;
using System.IO.Ports;
using System.Windows.Forms;
namespace SerialPortSettings
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Asignar las Velocidades seleccionables al Combo
object[] Velocidades = { 19200, 9600, 4800, 2400, 1200 };
this.comboBox_bits_por_segundo.Items.AddRange(Velocidades);
// Asignar Paridades Seleccionables desde la enumeracion
foreach (string s in Enum.GetNames(typeof(Parity)))
{
this.comboBox_paridad.Items.Add(s);
}
// Seleccionar los items por defecto
this.comboBox_bits_por_segundo.SelectedIndex = 0;
this.comboBox_paridad.SelectedIndex = 0;
// Abrir el puerto serie con los items por defecto
SeleccionCambiada(sender,e);
// Asignar la funcion a ejecutar por disparo de evento al cambio de indice en el combobox
this.comboBox_bits_por_segundo.SelectedIndexChanged += new System.EventHandler(this.SeleccionCambiada);
this.comboBox_paridad.SelectedIndexChanged += new System.EventHandler(this.SeleccionCambiada);
}
private void SeleccionCambiada(object sender, EventArgs e)
{
// Deberemos añadir un control de excepciones si queremos capturar posibles errores
// Para reasignar valores… primero cerrar el puerto
this.serialPort1.Close();
// Asignar los nuevos Settings
this.serialPort1.BaudRate = Convert.ToInt16(comboBox_bits_por_segundo.Text);
this.serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox_paridad.Text);
this.serialPort1.Open();
// Ver las asignaciones actuales.
this.Velocidad.Text = this.serialPort1.BaudRate.ToString();
this.Paridad.Text = this.serialPort1.Parity.ToString();
}
}
}