zoukankan      html  css  js  c++  java
  • C#中串口的DataReceived事件是怎么打开的

    1.从工具拦拖动一个SerialPort控件,在窗体下面会多出一个serialPort1的图标

    2.在serialPort1属性的事件(黄色闪电图标)里有个DataReceived事件

    3.双击DataReceived事件,写收到的数据的处理代码,端口打开后如果有数据来,就触发DataReceived事体 需要注意的是串用自已的这个事件自已开了一个线程,如果要修改原来窗体的控件属性要用到委托

    //窗体初始化
    private void SerialportSampleForm_Load(object sender, EventArgs e)
    {
        //初始化下拉串口名称列表框
        string[] ports = SerialPort.GetPortNames();
        Array.Sort(ports);
        comboPortName.Items.AddRange(ports);
        comboPortName.SelectedIndex = comboPortName.Items.Count > 0 ? 0 : -1;
        comboBaudrate.SelectedIndex = comboBaudrate.Items.IndexOf("9600");
        //初始化SerialPort对象
        comm.NewLine = "/r/n";
        comm.RtsEnable = true;//根据实际情况吧。
        //添加事件注册
        comm.DataReceived += comm_DataReceived;
    }
    
    void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        if (isClosing) return;//如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环
        try
        {
            Listening = true;//设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。
            int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
            byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
            received_count += n;//增加接收计数
            comm.Read(buf, 0, n);//读取缓冲数据
            builder.Clear();//清除字符串构造器的内容
            //因为要访问ui资源,所以需要使用invoke方式同步ui。
            this.Invoke((EventHandler)(delegate
            {
                //判断是否是显示为16禁止
                if (checkBoxHexView.Checked)
                {
                    //依次的拼接出16进制字符串
                    foreach (byte b in buf)
                    {
                        builder.Append(b.ToString("X2") + " ");
                    }
                }
                else
                {
                    //直接按ASCII规则转换成字符串
                    builder.Append(Encoding.ASCII.GetString(buf));
                }
                //追加的形式添加到文本框末端,并滚动到最后。
                this.txGet.AppendText(builder.ToString());
                //修改接收计数
                labelGetCount.Text = "Get:" + received_count.ToString();
            }));
        }
        finally
        {
            Listening = false;//我用完了,ui可以关闭串口了。
        }
    }
     
    JAVA&NET技术QQ群号:456257217有问题的可以在群里面提问。
  • 相关阅读:
    博客园的博客
    JAVASCRIPT拷贝内容到剪切板
    adobe acrobat pro 8.0/8.1 激活
    lighttpd+PHP上传文件
    windows上UPNP/DLNA服务器软件测试
    maven环境搭建
    Chrome调试博客地址
    struts2技术内幕读书笔记1
    git推送
    第九周助教小结
  • 原文地址:https://www.cnblogs.com/shiyh/p/14549020.html
Copyright © 2011-2022 走看看