2010-04-09 77 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财产。