以前这个问题困扰我多天最后查资料一大堆,最后最终攻克了,看到非常多人做C#串口都遇到相同的问题,所以写一篇博文,以便学习交流。

一定要在com实例化的时候设置ReceivedBytesThreshold 属性就能够

SerialPort com = new SerialPort();

            com.BaudRate = 19200;

            com.PortName = "COM1";

            com.DataBits = 8;

            com.Parity = (Parity)0;

            com.StopBits = 1;

            com.WriteTimeout = 3000;

            com.ReadTimeout = 3000;

            com.ReceivedBytesThreshold = 1;  //必须一定要加上这句话。意思是接收缓冲区其中假设有一个字节的话就出发接收函数。假设不加上这句话,那就有时候触发接收有时候都发了好多次了也没有触发接收,有时候延时现象等等,

            com.DataReceived += new SerialDataReceivedEventHandler(com_DataReceived);

这个问题问了好多人都说的不正确。最后突然在网上一片博文中发现的准备发一篇博文呢。还没有写呢。今天正好写一个

接收方法

/// <summary>

        /// 接受返回消息

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void com_DataReceived(object sender, SerialDataReceivedEventArgs e)

        {

            try

            {

                //接收数据

                do

                {

                    int count = com.BytesToRead;

                    if (count <= 0)

                        break;

                    g_RS232DataBuff = new byte[count];

                    com.Read(g_RS232DataBuff, 0, count);

                    g_i_DataBuffLen += count;

                    g_l_ReceivedCount += count;

                    //g_Data += Encoding.ASCII.GetString(g_RS232DataBuff);

                    foreach (byte b in g_RS232DataBuff)

                    {

                        g_s_Data += Convert.ToChar(b);





                        //g_Data += Encoding.Unicode.GetString(g_RS232DataBuff);

                        //queue.Enqueue(g_RS232DataBuff);

                    }





                } while (com.BytesToRead > 0);



//处理接收后的命令

                TranslateCommand2();

            }

            catch (Exception ex)

            {

                LogClass.WriteFile("error:接收返回消息异常。详细原因:" + ex.Message);

            }

        }

C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法的更多相关文章

  1. securecrt中进入uboot命令行时,出现无法键入任何指令的问题解决方法

    securecrt中进入uboot命令行时,出现无法键入任何指令的问题解决方法 可能出现以下几种情况 1.securecrt在创建连接时,忘记取消勾选流控: 2.usb转串口线坏了3.uboot有问题 ...

  2. 串口通信中,QString 、QByteArray 转化需要注意的问题

    在做串口通信的时候,其中犯了一个错误.在此记录一下:QT中串口通信接到收据和发送数据的接口如下: QByteArray QIODevice::readAll()//接受数据 qint64 QIODev ...

  3. c#中实现串口通信的几种方法

    c#中实现串口通信的几种方法 通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册 ...

  4. C#初入串口通信(串行通信)总结

    使用WinFrom来实现: 首先要知道串口通信协议以及原理 原理大概提一下:要自己翻阅看.(http://book.51cto.com/art/200911/162532.htm或者http://hi ...

  5. Linux与Windows串口通信

    串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.现在国际上不断有串口新技术及新规格推出,结合社会各方面需要,串口通信发展的空间庞大.串口通讯技术因其自身的优势和 ...

  6. 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

    在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中.之所以 ...

  7. QT串口通信编程

    QT串口编程 文件夹目录结构如下图所示 设计的示例界面如下图所示 首先在项目文件里面添加一句 QT += serialport SerialPortDemo.pro文件如下: #----------- ...

  8. C#中串口与Modem的通信

    C#中串口与Modem的通信 2007-08-20 09:52643人阅读评论(8)收藏举报 最近一段时间,试验了串口的数据传输.在C#中,其实有一个很好的类SerialPort使串口间的通信变得简单 ...

  9. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

随机推荐

  1. 使用js获取页面的各种高度

    使用js获取相关高度: 获取网页被滚动条卷去的高度——兼容写法: scrollHeight = documen.body.scrollTop || document.documentElement.s ...

  2. js中的constructor 和prototype

    参考 http://www.cnblogs.com/yupeng/archive/2012/04/06/2435386.html function a(c){ this.b = c; this.d = ...

  3. laravel groupby分组问题。

    laravel 5.7使用groupBy分组查询时会提示一个错误,但是sql可以执行. 因为:mysql从5.7以后,默认开启了严格模式. 解决方法:将/config/database.php 中:关 ...

  4. NYOJ301-递推求值

    递推求值 nyoj上矩阵专题里的10道题水了AC率最高的5道,惭愧,还不是完全自己写的,用了几乎两周的时间.模板题我是有自信写出来的,但对于高级一点的矩阵构造,我还是菜的抠脚. 这题感谢MQL大哥和她 ...

  5. PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的 ...

  6. c# 类如何生成dll文件及引用

    1.打开“工具”菜单下的“外部工具”子菜单: 2.点击“添加按钮,增加一个菜单,菜单内容填写如下: 注意参数那里为:/k "C:\vs2010\VC\vcvarsall.bat" ...

  7. linux centos7 swap 设置 添加 删除

    操作  需要  root 用户 权限 dd 命令 创建swap用的分区文件 /var/swap  dd if=/dev/zero of=/var/swap bs=1024 count=2048000 ...

  8. 使用RMAN恢复数据库

    使用RMAN恢复数据库 由于需要搭建一个测试环境,把上周末的一个全备拿出来做恢复,首先备份一下测试库上现有的重要表: exp banping/bangping@ERPTEST file=f:\2009 ...

  9. [NOIP2002] 提高组 洛谷P1031 均分纸牌

    题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  10. [USACO13NOV]空荡荡的摊位Empty Stalls

    题目描述 Farmer John's new barn consists of a huge circle of N stalls (2 <= N <= 3,000,000), numbe ...