C# serialport内datareceived事件接收串口数据,详细步骤。

我是新手,刚接触C#。请各位大神详细说明一下,在网上查找的资料越看越晕。请您详细讲解委托、以及在界面更新接收后的数据那里。privatedelegatevoidMyDel... 我是新手,刚接触C#。请各位大神详细说明一下,在网上查找的资料越看越晕。请您详细讲解委托、以及在界面更新接收后的数据那里。
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);
展开
 我来答
帐号已注销
2020-08-25 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:165万
展开全部

//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位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

参考资料来源:百度百科-串口通信

意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
FoolRabbit编程
推荐于2017-09-06 · 知道合伙人数码行家
FoolRabbit编程
知道合伙人数码行家
采纳数:619 获赞数:3805
毕业于苏州大学,4年编程经验,对WPF有研究。

向TA提问 私信TA
展开全部

由于串口在不断的接收数据,DataReceived事件在不断的触发,所以数据处理放到委托里面,DataReceived只做数据接收,假如你把数据处理放在DataReceived事件中,可能会影响到数据的接收。

如果你对委托不太了解,可以查阅MSDN文档:http://msdn.microsoft.com/zh-cn/library/ms173171.aspx

另外,调试的话最好不要用MessageBox,用MessageBox后需要点击确定才能执行下面的代码,影响程序的执行。

用Console.WriteLine(text),在输出的调试列表即可看到信息。

如有疑问,继续追问。

更多追问追答
追问
请问如何显示在界面的listbox或者textbox中?晕乎乎的。还有,方便加Q Q吗?多向您请教请教。
追答
你的委托方法就是将数据添加到listBox1

调用了该委托就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式