首页 新闻 会员 周边

大侠们麻烦帮忙看一下代码,求指教~~~

0
悬赏园豆:5 [已解决问题] 解决于 2012-10-11 13:56

public partial class Form1 : Form
{
SerialPort serialport1 = new SerialPort();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

serialport1.PortName = "COM5";
serialport1.BaudRate = 9600;
serialport1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialport1.WriteLine(str);

MessageBox.Show("数据发送成功!", "系统提示");
}

private void button2_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(serialport1.ReadLine());
textBox2.Text = Encoding.Unicode.GetString(data);

serialport1.Close();
MessageBox.Show("数据接收成功!", "系统提示");
}

 

 

为什么button1发送之后,点击button2没有接受到数据,程序直接就死那了,,求解~

Philomena的主页 Philomena | 初学一级 | 园豆:154
提问于:2012-10-09 17:12
< >
分享
最佳答案
0

串口通信是双向的,你用串口1发送数据,就不能用串口1接收数据,应该用另外一个串口接收数据,并且这两个串口必须能够正常通信,要用串口线连接着,你的button2_Click事件要使用另外一个串口来接收数据,要保证你电脑里确实存在这两个串口,串口号要写对,这里有关于Serialport的介绍。http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

收获园豆:5
眯妖 | 小虾三级 |园豆:820 | 2012-10-10 11:44
其他回答(2)
0

serialport1.Flush没有是否有缓冲问题

另外点击button2是在发送结束后,端口上的数据也有超时丢弃问题,如果已经丢了,那么读的时候就阻塞了,程序直接就死那

2012 | 园豆:21232 (高人七级) | 2012-10-09 17:31

那怎么解决数据超时丢弃问题?求指教

支持(0) 反对(0) Philomena | 园豆:154 (初学一级) | 2012-10-09 17:32

@Philomena: 设置serialport1.ReadTimeout

支持(0) 反对(0) 眯妖 | 园豆:820 (小虾三级) | 2012-10-10 11:44
0

在 serialport1.WriteLine(str); 之后加上一行代码试试:

serialport1.Flush();

 

 

dudu | 园豆:30880 (高人七级) | 2012-10-09 17:31
serialport1没有Flush这个属性
支持(0) 反对(0) Philomena | 园豆:154 (初学一级) | 2012-10-09 17:33

错误 1 “System.IO.Ports.SerialPort”并不包含“Flush”的定义

支持(0) 反对(0) Philomena | 园豆:154 (初学一级) | 2012-10-09 17:35

加的这句serialport1.BaseStream.Flush();不过还是不行,程序还是在接收数据的时候会直接死掉

支持(0) 反对(0) Philomena | 园豆:154 (初学一级) | 2012-10-09 17:41

@Philomena: 应该在事件中接收,参考文章:

C# SERIALPORT异步读取总结

C# SerialPort运行方式

支持(0) 反对(0) dudu | 园豆:30880 (高人七级) | 2012-10-09 17:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册