C# serialport内datareceived事件接收串口数据,详细步骤。
private delegate void MyDelegate(string str);
private void DisplayData(string str)
{
MessageBox.Show("5");
textBox2.Text=str;
MessageBox.Show("6");
listBox1.Items.Add(str);
MessageBox.Show("7");
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
MessageBox.Show("1");
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
MessageBox.Show("2");
string str = Encoding.Unicode.GetString(data);
MessageBox.Show("3");
MyDelegate md = new MyDelegate(DisplayData);
MessageBox.Show("4");
this.BeginInvoke(md, new object[] { str});
MessageBox.Show("8");
//DisplayData(str); 展开
//Thread.sleep(1000);//处理事件这块可以加上延时确保不定数的数据可以全部收到缓冲后,才去读缓冲内容--单位:毫秒
byte[] data = new byte[serialPort1.BytesToRead]; //定义缓冲区,因为串口事件触发时有可能收到不止一个字节
serialPort1.Read(data, 0, data.Length);//读取指定长度
foreach (byte Member in data) //遍历用法
{
string str = Convert.ToString(Member, 16).ToUpper();
textBox1.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");
}
读取有的string InputData = serialPort1.ReadExisting();
单字节读取(当波特率高时就会丢失数据)
byte DataReceived = (byte)(serialPort1.ReadByte());
扩展资料:
衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。
如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
参考资料来源:百度百科-串口通信
推荐于2017-09-06 · 知道合伙人数码行家
由于串口在不断的接收数据,DataReceived事件在不断的触发,所以数据处理放到委托里面,DataReceived只做数据接收,假如你把数据处理放在DataReceived事件中,可能会影响到数据的接收。
如果你对委托不太了解,可以查阅MSDN文档:http://msdn.microsoft.com/zh-cn/library/ms173171.aspx
另外,调试的话最好不要用MessageBox,用MessageBox后需要点击确定才能执行下面的代码,影响程序的执行。
用Console.WriteLine(text),在输出的调试列表即可看到信息。
如有疑问,继续追问。
请问如何显示在界面的listbox或者textbox中?晕乎乎的。还有,方便加Q Q吗?多向您请教请教。
你的委托方法就是将数据添加到listBox1
调用了该委托就可以了。