2017-09-26 111 views
0

我想用GUI創建串口偵聽器。 我試圖將收到的數據打印到textBox中。當我點擊按鈕程序必須開始收聽,一切正常,但不打印到textBox。 這裏是EventHandler代碼:C# - 串口偵聽 - 如何將數據打印到文本框中

void serialPortDataReceived(object sender, SerialDataReceivedEventArgs e) 
     { 
      SerialPort sp = (SerialPort)sender; 
      string indata = sp.ReadExisting(); 
      textBox1.AppendText(indata + "\r\n"); 
     } 

而且按鍵代碼開始監聽:

mySerialPort.BaudRate = 9600; 
mySerialPort.Parity = Parity.None; 
mySerialPort.StopBits = StopBits.One; 
mySerialPort.DataBits = 8; 
mySerialPort.Handshake = Handshake.None; 
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
mySerialPort.Open(); 

需要一些幫助:)

+0

您無法更新從DataReceivedEvent UI,它是在一個工作線程被解僱。爲什麼你沒有得到InvalidOperationException並不明顯,請確保你沒有禁用它。 –

+0

也許你需要改變mySerialPort.ReadTimeout,順便說一句,默認情況下它是500毫秒。也許500是不夠的 –

回答

0

您可以使用RichTextBox如下:

1選項

RichTextBox1.Text += sp.ReadExisting() + "\n"; 

第二個選項 - 第二個選擇使用代理,你可以說,方法的簽名:

public delegate void AddDataDelegate(String myString); 
public AddDataDelegate myDelegate; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.myDelegate = new AddDataDelegate(AddDataMethod); 
} 

public void AddDataMethod(String myString) 
{ 
    TextBox1.AppendText(myString); 
} 

private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string s= sp.ReadExisting(); 

    TextBox1.Invoke(this.myDelegate, new Object[] {s});  
} 
相關問題