[转]How to display the data read in DataReceived event handler of serialport
问:
I have the following code which needs the data to be read from port and then display in a textbox. I am using DataReceived event handler for this purpose but donot know how to display this data in textbox. From various sources i learnt that Invoke method should be used for this but donot know how to use it. Suggestions please...
private void Form1_Load(object sender, EventArgs e) { //SerialPort mySerialPort = new SerialPort("COM3"); mySerialPort.PortName = "COM3"; mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.DataReceived += new SerialDataReceivedEventHandler(mySerialPort_DataReceived); mySerialPort.Open(); } private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string s= sp.ReadExisting(); // next i want to display the data in s in a textbox. textbox1.text=s gives a cross thread exception } private void button1_Click(object sender, EventArgs e) { mySerialPort.WriteLine("AT+CMGL=\"ALL\""); }
答:
The MSDN contains a good article with examples about using control methods and properties from other threads.
In short, what you need is a delegate method that sets the Text
property of your text box with a given string. You then call that delegate from within your mySerialPort_DataReceived
handler via the TextBox.Invoke()
method. Something like this:
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 mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string s= sp.ReadExisting();
textbox1.Invoke(this.myDelegate, new Object[] {s});
}
posted on 2018-11-22 17:19 freeliver54 阅读(218) 评论(0) 编辑 收藏 举报