C#自定义组合串口控件

总述

winform自定义组合控件可以对经常使用的一些功能进行封装到一起,形成一个新的控件,方便使用。

示例说明

创建项目

打开VS,选择窗体控件库创建项目

串口配置控件

实现效果

在这里插入图片描述

控件说明
label4显示连接状态
串口号combox初始化时自动搜索串口并添加
波特率combox限定选择项(115200等)
数据位combox5,6,7,8
停止位combox0, 1.5, 2
自动重连checkbox串口因某些原因断开时自动尝试重连
启动button启动串口并创建线程接收,收到后传入回调
搜索picturebox手动搜索串口号
实现代码

搜索串口号

` string[] com_array = SerialPort.GetPortNames();
  comboBox1.Items.Clear();
  comboBox1.Items.AddRange(com_array);`

回调函数

public delegate void DataProcCallBack(byte[] data, int len);  //定义委托
public event DataProcCallBack DataInput;

//外部调用
放置控件后再事件里找到DataInput双击就可以编写自己的处理代码了,注意改变控件时要用委托
//示例
delegate void setText(string t);
void setrichText(string t)
{
    if (richTextBox1.InvokeRequired)
    {
    while (!richTextBox1.IsHandleCreated)
    {
    //解决窗体关闭时出现“访问已释放句柄“的异常
    if (richTextBox1.Disposing || richTextBox1.IsDisposed)
    return;
    }
    setText st = new setText(setrichText);
    richTextBox1.Invoke(st, new object[] {t});
    }
    else
    {
    richTextBox1.AppendText(t);
    }
}

打开串口

 serialPort1.Open();
 if (serialPort1.IsOpen)
 {
 label4.Text = "打开成功";
 uiButton1.Text = "关闭";
 serialRevFlag = true;
 serialThread = new Thread(serialRevTask);
 serialThread.Start();
 }

接收线程

 byte[] serialRevBuffer = new byte[1024];
 void serialRevTask()
 {
    while (serialRevFlag)
    {
        try
        { 
            int len =   serialPort1.Read(serialRevBuffer, 0, 1024);
            DataInput(serialRevBuffer, len);

        }
        catch{ 
        }
            Thread.Sleep(2);
    }
    return;
 }

获取源码

  • 当前版本自动重连还未加

    关注公众号,发送 串口控件
    在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值