C# C中的串口编程帮助#

C# C中的串口编程帮助#,c#,serial-port,C#,Serial Port,最近,我想使用C#中的SerialPort类从串行端口连接和读取数据。我有一台来自Hundura的名为RTA600的考勤机。它通过串行到USB转换器连接到我的电脑。我测试的代码如下 SerialPort serialPort1 = new SerialPort(); serialPort1.PortName = "COM1"; serialPort1.BaudRate = 9600; serialPort1.Parity = System.IO.Ports.Parity.None; se

最近,我想使用C#中的SerialPort类从串行端口连接和读取数据。我有一台来自Hundura的名为RTA600的考勤机。它通过串行到USB转换器连接到我的电脑。我测试的代码如下

SerialPort serialPort1 = new SerialPort();    
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.DataBits = 8;
serialPort1.StopBits = System.IO.Ports.StopBits.One;
serialPort1.Handshake = System.IO.Ports.Handshake.None;
serialPort1.RtsEnable = true;

// Open the Serial Port
serialPort1.Open();  

// Read Data from Serial port
string RXstring = serialPort1.ReadLine();

我使用System.Io.Ports命名空间的SerialPort类。但是当执行serialPort1.ReadLine()时,代码会挂起。有人能告诉我如何通过串行到usb转换器从time machine读取数据吗?您可以使用
ReadExisting()
一次读取整个数据。 您需要处理
DataReceived
事件的
SerialPort

serialPort1.ReadExisting();
示例:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
           String myData=serialPort1.ReadExisting();
        }
示例代码:这里我想向您展示读取数据的代码(RFID标签代码,基本上长度为12)


ReadLine
语句将阻止代码,直到从设备接收到换行。正如下面答案中所建议的,请改用
DataReceived
事件。
        String macid  = "";
        private void DoWork()
        {
            Invoke(
                  new SetTextDeleg(machineExe ),
                  new object[] { macid  });
            macid  = "";
        }
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            string str1;
            macid += serialPort1.ReadExisting();

            if (macid.Length == 12)
            {
                macid = macid.Substring(0, 10);
                Thread t = new Thread(new ThreadStart(DoWork));
                t.Start();
            }
        }

         public void machineExe(string text)
          {
            TextBox1.Text=text;
          }