Я пытаюсь создать приложение для чтения последовательных данных с любого порта, доступного на ПК с Windows, эти порты должны оставаться открытыми и ожидать сигнала для чтения. Я использую считыватель RFID.поэтому я создал функцию, которая может открыть порт, указав его номер, но проблема в том, что открытый порт был развернут до максимума, всего 4 порта после нескольких чтений затем он отключается, и вам нужно перезапустить процесс снова.
Есть ли способ улучшить мой код, я подозреваю, что из-за нехватки питания мой считыватель (5 В) купил USB-концентратор с внешним питанием, но моя проблема все еще существует.Любое предложение было бы здорово.
private void OpenSerial(String COM)
{
_serialPort = new SerialPort();
_serialPort.PortName = COM;
_serialPort.BaudRate = 9600;
_serialPort.Parity = Parity.None;
_serialPort.StopBits = StopBits.One;
_serialPort.Handshake = Handshake.None;
_serialPort.DataBits = 8;
_serialPort.ReadTimeout = 2000;
_serialPort.WriteTimeout = 500;
_serialPort.DtrEnable = true;
_serialPort.RtsEnable = true;
try
{
_serialPort.Open(); //opens the port
}
catch (Exception ex)
{
textBox1.AppendText(String.Format("Port is already open."));
textBox1.AppendText(System.Environment.NewLine);
}
_serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
_serialPort.DataReceived += DataReceivedHandler;
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
System.Threading.Thread.Sleep(100);
string indata = sp.ReadExisting();
string spN = sp.PortName;
this.BeginInvoke(new SetTextDeleg(DisplayOutput), new object[] { indata, spN } );
Debug.WriteLine(indata);
}
Тогда я использую это, как показано ниже.
OpenSerial("COM1");
OpenSerial("COM2");
OpenSerial("COM3");
OpenSerial("COM4");