C#多次打开的串行端口在多次读取数据后始终关闭

时间:2018-09-15 01:46:26

标签: c# serial-port

我正在尝试创建一个应用程序,以从Windows PC上可用的任何端口读取串行数据,该端口必须保持打开状态,并等待信号被读取。我正在使用RFID阅读器。因此我创建了一个可以通过提供端口号来打开端口的函数,但是问题是打开的端口已最大化时,经过多次读取后总共有4个端口,然后断开连接,您需要重新启动该过程。

是否有任何方法可以改善我的代码,我的第一个怀疑是由于我的阅读器(5V)电源不足,所以我购买了带有外部电源的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");

0 个答案:

没有答案