串口接收中文时乱码

Andrew_wx Andrew_wx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
求助大神:串口接收文本时,以十六进制接收时数据正常,接收以中文显示时偶尔会出现乱码,一直搞不定,请高手给点意见。

代码如下
        private void btnComOpen_Click(object sender, EventArgs e)
{
if (btnComOpen.Tag.ToString() == "0")
{
ComDevice.PortName = cbbComList.SelectedItem.ToString();
ComDevice.BaudRate = 115200;
ComDevice.Parity = (Parity)0;
ComDevice.DataBits = 8;
ComDevice.StopBits = (StopBits)1;
try
{
ComDevice.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
btnComOpen.Text = "关 闭";
btnComOpen.Tag = "1";
picComStatus.Image = Properties.Resources.green;
ComDevice.DataReceived += new SerialDataReceivedEventHandler(ComDevice_DataReceived);
}
else
{
try
{
ComDevice.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
btnComOpen.Text = "打 开";
btnComOpen.Tag = "0";
picComStatus.Image = Properties.Resources.red;
}
}

#region 接收数据

private void ComDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] ReDatas = new byte[ComDevice.BytesToRead];//返回命令包
ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据
UpdateRecevie(System.Text.Encoding.Default.GetString(ReDatas));
}

public delegate void UpdateString(object NewData);
public void UpdateRecevie(object NewData)
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateRecevie);
this.Invoke(_myInvoke, new object[] { NewData });
}
else
{
txtComReceive.AppendText(NewData.ToString());
txtComReceive.SelectionStart = txtComReceive.Text.Length - 1;
txtComReceive.ScrollToCaret();
}
}
#endregion
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
Andrew_wx
C# 111,129 成员 642,538 内容