2010-04-09 81 views
0

我正在使用以下代碼來使用串行端口事件處理程序接收消息。但它劑量收到any.I沒有得到錯誤。代碼打破「string msg = comport.Readline()」我做錯了什麼?DataReceived未收到消息的事件處理程序

public partial class SerialPortScanner : Form 
{ 
    private SerialPort comPort = new SerialPort(); 

    public SerialPortScanner() 
    { 
     InitializeComponent(); 
     comPort.Open(); 
     comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); 

    } 


    void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     if (comPort.IsOpen == true) 
     { 
      string msg = comPort.ReadLine(); 
      MessageBox.Show(msg); 
     } 
    } 
} 
+0

你是什麼意思,「代碼打破?」 – 2010-04-09 01:27:15

回答

1

當從串行端口對象接收到數據時,會在輔助線程上產生DataReceived事件。由於此事件是在輔助線程(而不是主線程)上引發的,因此嘗試修改主線程中的某些元素(例如UI元素)可能會引發線程異常。

來源:Check this

1

ReadLine取決於具有NewLine字符。用Read方法可能會更好。另見BytesToRead財產。