我正在尝试创建一个应用程序,以从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");