rxtx串口事件不触发_工控人写代码(2)之C#串口操作小程序

工作上需要用到上位机进行数据交互,所以就用C#编制了一个简单的串口信息收发程序。界面如下:

b629b4957a85ccfd80ee4cf132d8e4f7.png

开发过程中遇到的一个问题是串口的接收。串口接收大体来说有两个方式,一个是同步读取,也即利用循环不断的读串口缓存,另外一个就是利用事件触发的方式。第一种方法效率低,不推荐,第二种则需要利用到跨线程的内容。本人就是卡在这里一天,其实也就10来句代码的事,无奈自己玩这个没得请教,只有求助万能的百度。经过一天多断续的摸索,终于解决了这个问题。

在贴上代码前,先解释一下代码中会用到的一些控件的名称。

1、 cmbportname:设置串口号的下拉列表

2、 cmbbaudrate:设置波特率的下来列表

3、 bttopenport:打开/关闭串口的动作按钮

4、 txSend:要发送的数据显示文本框

5、 bttSend:发送那妞

6、 txrecieve:接收到的数据显示文本框

7、 bttClear:清空接收数据的按钮

涂黄的代码关系到异步接收数据,只要照着那几个涂黄的代码改一下,应该就可以实现了功能了。需要完整代码的也可以发邮件给我,。

代码中的SP是从工具箱拖进来的一个serialport控件。

代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO.Ports;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

public delegate void getstring(string dataRe);//定义委托

getstring getmystring;//定义委托变量

private void DoUpdate(string data)

{

tbRecieve.Text = tbRecieve.Text + data;//数据处理,将当前数据与文本框文本合并

if (label5.BackColor == Color.AliceBlue)//改变lable的颜色,提示收到数据

{

label5.BackColor = Color.Black;

}

else label5.BackColor = Color.AliceBlue;

}

void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)//接收事件触发方法

{

try

{

string mystring = SP.ReadExisting();

getmystring = new getstring(DoUpdate);

Invoke(getmystring, mystring);

}

catch (Exception EX)

{

MessageBox.Show(EX.Message, "出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值