2013-12-22 28 views
0

最近我想連接並使用C#中的串行端口類使用串行端口讀取數據。我有一個來自Hundura的名爲RTA600的考勤機。它通過串口轉USB轉換器連接到我的電腦。我測試的代碼如下C#中的串行端口編程幫助#

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(); 

我使用SerialPort類的System.Io.Ports命名空間。但是,當serialPort1.ReadLine()執行時,代碼會掛起。可以有人給我一個想法,我怎麼可以通過串行到USB轉換器從時間機器讀取數據

+0

「ReadLine」語句將阻止代碼直到從設備收到換行符。正如以下答案中所建議的那樣,請改用「DataReceived」事件。 – nicholas

回答

0

您可以使用ReadExisting()一次讀取整個數據。 您需要處理DataReceived事件SerialPort

serialPort1.ReadExisting(); 

樣品:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
     { 
      String myData=serialPort1.ReadExisting(); 
     } 

示例代碼:在這裏,我想向您展示的代碼讀取數據是(RFID標籤代碼基本上長度爲12)

 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; 
      }