2013-03-15 80 views
0

我正在用C#編寫一個程序,我想從USB端口讀取數據並在收到時寫入文本框。我有一臺萬用表,它通過RS-232發送數據(通過PuTTY驗證),並且我已將232連接到Prolific 2303 USB串行轉換器。我使用設備管理器來查明這是COM4,並檢查萬用表的規格以找到波特,停止位,奇偶校驗等。我使用的是System.IO.Ports.SerialPort,並且我設置了串口對象與適當的COM引用,波特等。出於某種原因,DataReceived事件似乎從來沒有被觸發,因爲我的委託函數不執行。就像我說的,我知道數據到達的事實,因爲我可以在PuTTY中看到它。下面是我的代碼,希望有人可以幫助我...請告訴我,如果您需要更多信息來弄清楚這是怎麼回事。很多,很多人提前感謝!USB串行轉換器不會觸發C#中的DataReceived

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 
using System.IO.Ports; 
using System.Reflection; 
using System.Threading; 

namespace WindowsFormsApplication1 
{ 
    public partial class dataAcquisitionMain : Form 
    { 
     string RxString; 

     public dataAcquisitionMain() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e)//"Start" button 
     { 
      serialPort1.PortName = "COM4"; 
      serialPort1.BaudRate = 2400; 

      serialPort1.Open(); 
      if (serialPort1.IsOpen) 
      { 
       inputStream.ReadOnly = false; //A text box I want to put data into 
       startButton.Enabled = false; 
       stopButton.Enabled = true; 
      } 
     } 

     private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
     { 
      serialPort1.DataReceived += serialPort1_DataReceived; 
      RxString = serialPort1.ReadExisting(); 
      this.Invoke((MethodInvoker)delegate{DisplayText();}); 
     } 
     private void DisplayText() 
     { 
      textBox1.Text = "here"; 
      inputStream.Text = RxString; 
      inputStream.AppendText(RxString); 
     } 

     private void dataAcquisitionMain_FormClosing(object sender, EventArgs e) 
     { 
      if (serialPort1.IsOpen) serialPort1.Close(); 
     } 
    } 
} 
+0

我已經解決我自己的問題。對於任何與我有同樣問題的人,我必須將串口對象上的屬性DTREnable更改爲True。 – user2172571 2013-03-15 14:14:29

回答

2

嘗試把

serialPort1.DataReceived += serialPort1_DataReceived;

在dataAcquisitionMain()。

它看起來像你正試圖初始化調用

serialPort1_DataReceived; 

在事件處理程序的事件。

如果這是有道理的。

嘗試:

SerialPort.comPort.DataReceived +=new SerialDataReceivedEventHandler(comPort_DataReceived); 
+0

同意。 OP在事件處理程序本身內部添加事件處理程序是沒有意義的。沒有辦法調用'serialPort1_DataReceived'。 – MusiGenesis 2013-04-10 11:47:50