急急急啊!c#串口触发接收问题,求大侠帮帮我。。。

privatevoidserialPort1_DataReceived(objectsender,SerialDataReceivedEventArgse){try{Me... private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

try
{
MessageBox.Show("触发成功2", "系统提示");
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());

tbxInt.Text += Encoding.Unicode.GetString(data);
}
catch (Exception)
{
MessageBox.Show("读取串口数据时发生错误");
}
}

触发后显示:“触发成功2”,接着就是“读取串口数据时发生错误”,又接着是“触发成功1”,这是为什么啊?接受的代码哪里错了啊?大侠们,帮帮我啊。。。
展开
 我来答
出生神探
2012-09-22 · 超过23用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:40.9万
展开全部
你用readline读得到的是字符串。他自己本来就包含了将二进制转化成string的能力;根据不同的编码,显示出不同的内容。你可以设置下serialPort1的编码encoding,得到正确的字符串内容(ascii gb2312 unicode)。
你将readline 之后的string再转化成字节再转化成string。结果肯定是错的。

你可以试试直接readline出来的结果。说必定就是对的,不对的话,serialport有个Encoding属性可以设置发送接受前后文本转换的字节编码;设置成你想要的(按你的代码应该是Encoding.Unicode),然后看readline出来的结果是否你想要的
还一种方法就是直接读取二进制。而不是读取字符串
SerialPort1.BytesToRead;能知道这次传送过来的字节数量。在用SerialPort1.ReadByte()每次读取一个字节。存到字节数组中;外面嵌套一个循环。循环次数就是之前获取的传送字节数。
百度网友d14e964
2012-09-21 · TA获得超过953个赞
知道小有建树答主
回答量:395
采纳率:100%
帮助的人:450万
展开全部
你这么用串口本来就可能各种问题。
串口的数据一次不一定能发完,和你设计的通信协议、硬件状况都有关系。
你应该自己判断传完了没。

另外串口的数据应该是ASCII纯数据吧,怎么会是Base64?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
duyj1234
2012-09-21 · 超过24用户采纳过TA的回答
知道答主
回答量:189
采纳率:0%
帮助的人:66.1万
展开全部
try里就先‘触发成功’,肯定是下面两句发生异常了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友94f02eb
2012-09-20 · TA获得超过8613个赞
知道大有可为答主
回答量:7955
采纳率:74%
帮助的人:4524万
展开全部
....
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式