请问,在C#中SerialPort.DiscardInBuffer以及SerialPort.DiscardOutBuffer这两个方法应该在什么时候用?

作者&投稿:滕朋 (若有异议请与网页底部的电邮联系)
C#Serialport.DiscardInBuffer,DiscardOutBuffer的具体作用~

1)MSDN的解释:
DiscardInBuffer:丢弃来自串行驱动程序的接收缓冲区的数据;
DiscardOutBuffer:丢弃来自串行驱动程序的传输缓冲区的数据;
2)在上述解释中“串行驱动程序的接收/发送缓冲区”,示意图如下:

驱动程序内部维护的两个缓冲区(绿色的)就是“串行驱动程序的接收/发送缓冲区”。应用程序发送的数据,首先到达驱动程序内部的接收缓冲区,然后再由驱动程序交给硬件发送;硬件接收的数据,首先由驱动程序接收到驱动程序内部的接收缓冲区,然后再被应用程序读取到程序内部。

没有特别原因,不要清除buffer。
感觉你的DataReceived好像有问题。是不是处理时间太长了啊。

1)用途:

  • SerialPort.DiscardOutBuffer方法清除串行驱动程序发送缓冲区的数据;

  • SerialPort.DiscardInBuffer方法清除串行驱动程序的接收缓冲区的数据; 

2)用法:

 当你的程序在窗口发送一帧数据(所谓一帧是指由多个字节组成的有逻辑意义的数据)过程中检测到串口发送错误,如果让串口继续发生就没有意义了,这个时候可以用SerialPort.DiscardOutBuffer方法来清除已经进入发送缓冲区的错误数据;

类似地,当你的程序在接收一帧数据时发生错误,如果再让串口继续接收也没有意义了,这个时候可以用SerialPort.DiscardInBuffer方法来清除已经进入接收缓冲区的错误数据了




问: 5 在C语言中,以下合法的字符常量是() A. '\\0824' B.'\\x243...
A. '\\0824' \/\/ \\0表示后面接着八进制数字(即数字不能超过8),所以a错 B.'\\x243' \/\/ \\x表示十六进制,表示的是一个整数,不能表示字符常量 C.'0' \/\/表示数字0的字符,它有ascii码,所以C正确 D.''\\0'' \/\/双引号表示字符串常量,所以D错,(你需要的是字符常量)

问一下哪位知道在C语言中++a*a--的值是多少?a=5.具体计算哦,答案是25哦...
自右向左运算,A--为5,A变成4,然后前面的++A的值就是4+1=5,两者相乘,即5*5=25,要分清运算顺序和++A。A++的区别,而且单目运算++,——的运算优先级高于双目运算的*,\/,

求问, 在C 语言中, 要做一个21点游戏. 给出三个卡片的数字(1-10) 凑...
发牌时判断如果这张牌是A而且现在的点数<11,就让它变成11,否则就是1 摸下一张牌时判断点数是否>21而且里面含有点数是11的A,有则改成1

你好,我想问下,在C语言中,a=a,就是说a赋值于a.可不可以,谢谢,如 if...
可以,但a=a没有实际意义 对于你在下面的追问 这样也不必要,当a>b时不必执行任何操作,考虑a<b即可,a,b换位时必须用t,正确程序如下 include <stdio.h> main(){int a,b,t;scanf("%d%d",&a,&b);if(a

问下为何在C语言中,设a=5,则++a*--a=25?
看到这个第一眼确实有点难,但是仔细看看就知道。这个语句运算有自加和自减,自加和自减都在a的前面,所以是先执行自加和自减运算确定a的值后再算这个运算式,自加和自减后a的值还是5,所以是25。

麻烦问一下,在C语言中 '*='是什么意思?
这个是复合赋值运算符 比如 c*=5;就相当于 c=c*5;其它相似的还有 -=,+=,\/=等等 都是一样的操作方法 就是把等号后面的值当成一个整体,与左右的变量运算后,再赋值给左边的变量 a*=a+b ;相当于 a=a*(a+b);

在C语言编程中应该注意哪些问题
C语言程序设计入门学习六步曲 笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手。发生这种现象的原因有三个: 一、所谓的看懂听明白,只是很肤浅的语法知识,而我们编写的程序或软件是要根据要解决问题的实际需要控制程序的...

在C语言程序组里面看见 “@far”。问下“@”是什么意思,其什么作用
非标准C的@far 和COSMIC 的 C编译器相关联的 在STM8中,指定地址的长度可以有3种方式,@tiny使用1个字节表示地址,只能寻址地址范围0x00~0xFF;@near使用2个字节表示地址,只能寻址地址范围0x0000~0xFFFF;@far使用3个字节表示地址,寻址地址范围0x000000~0xFFFFFF ...

我是刚开始学c语言的! 想问一下在c语言的编程中什么时候用到include"ma...
用到以下函数的时候包含math.h 1、 三角函数 正弦 余弦 正切 2 、反三角函数 3 、双曲三角函数 4 、指数与对数 5 、取整 6 、绝对值 7 、标准化浮点数 8 、取整与取余 9 、其他

问个C++中的初级问题; 在C++中,c=(-a++)+(++b)里的-a代表什么,-a++先...
int a = 2, b=1;c=(-a++)+(++b) 处理成:c=(-a) + (++b); c = (-2) + (2) = 0 算毕,再算 a=a+1; a=2+1=3. \/\/ 这里用的a不是 -2 哦 !=== 简化为:int a=2,c;c=(-a++);printf("%d %d\\n",c,a);结果:-2 3 \/\/ 觉得奇怪吧。

砀山县19694901493: C#serialport控件详细用法 -
终底洛芬: 首先是打开串口:serialPort1.PortName = portList.SelectedItem.ToString(); serialPort1.BaudRate = Convert.ToInt32(baudrateList.SelectedItem.ToString()); serialPort1.StopBits = StopBits.One; serialPort1.Parity = Parity.None; serialPort1.DataBits ...

砀山县19694901493: C#中serialport控件使用 -
终底洛芬: do set WSHshellA = wscript.createobject("wscript.shell") a=inputbox(" "+vbcrlf+vbcrlf+" 请输入您要预交的金额","温馨提示") if a=5 thenmsgbox("成功预交金额5元."),4096+64,"温馨提示"exit doelseif a=10 thenmsgbox("成功预交金额10元."),4096+64,"温馨提示"exit do elsemsgbox "请输入5元或10元" end if loop

砀山县19694901493: C# 怎么调用 serialport类 -
终底洛芬: 看你需要,可以放也可以不放,不放的话你自己在代码中创建一个也是可以的,诸如象 serialport sp=new serialport(); sp.baudrate=9600; sp.databits=8; ......

砀山县19694901493: 如何用C#中的SerialPort写一个通信串口调试程序 -
终底洛芬: 那你就拖控件SerialPort,然后看看这个SerialPort有哪些方法和属性. 一般步骤就是给SerialPort定义端口名字,波特率,然后open,然后就可以发送你的要发送的东西了,SerialPort.Write,SerialPort.Read之类的方法很多,你可以看看说明并且都去试一试,操作完之后Close就行了. 串口通讯的难点就是根据协议收发报文数据时的丢帧问题.

砀山县19694901493: 如何使用c#中的serialPort控件通过串口发送16进制数 -
终底洛芬: 我做过类似的工作,方法大致是这样的:如果你想往利用SerialPort类往串口里发送16进制数是AA、AA、0B 可以这样:char commandStr[3]={(char)0xAA,(char)0xAA,(char)0x0B};这样定义了一个命令帧 利用串口类SerialPort的函数WriteToPort将commandStr写入就可以了.

砀山县19694901493: C# SerialPort类中SerialPinChange和PinChange的使用方法 -
终底洛芬: RS232串行通信接口硬件上有三个信号输入引脚:CTS:这个信号源自对方(通常是DSE类型的设备,如调制解调器),告诉你DSE已经同意你发送数据DSR:这个信号源自对方(通常是DSE类型的设备,如调制解调器),告诉你DSE已经准...

砀山县19694901493: 在c#中,怎样动态生成SerialPort类的实例及操作 -
终底洛芬: 我也写过SerialPort接收com端口数据的程序.winform.我接收数据是通过通讯协议.不知是否对你有用. try { //打开串口写数据 sp = new SerialPort(); sp.PortName = com1 sp.BaudRate = 2400; sp.Open(); sp.ReadTimeout = 1000; sp....

砀山县19694901493: c# serialport的使用 -
终底洛芬: ReadExisting()方法是读取 SerialPort 对象的输入缓冲区中所有立即可用的字节,你上面写入的是at,读取的肯定也是at.

砀山县19694901493: 用c#2008,在窗体上有一个serialport控件用来通过串口设备发送的数据.请问一下,现在有一个线程是 -
终底洛芬: 接收的方法是:把下面代码放在定时器中, byte[] number=null ; private int countlength =0; if (Serialport.IsOpen && Serialport.BytesToRead > 0) { countlength = Serialport.BytesToRead; number= new byte[countlength]; Serialport.Read(...

砀山县19694901493: C#2.0中,SerialPort如何读取串口数据并显示在TextBox上 -
终底洛芬: SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一、线程实时读串口;二、事件触发方式实现. 由于线程实时读串口的效率不是十分高效,因此比较好的方法是事件...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网