首先声明一下,我是初学者不是业余开发人员,在学校也没有学过,勿喷,谢谢!自己为生产线编写了一个串口读码程序,如果按照图示代码的话没有问题,我想实现只显示最新数据,新数据来的时候把旧数据覆盖掉,
现在扫码枪的数据总是追加在textbox1中,我试过了直接“=”,总是丢失数据,显示不全,不知道该怎么改代码,求助大师们指点一下,多谢多谢。
现在扫码枪的数据总是追加在textbox1中,我试过了直接“=”,总是丢失数据,显示不全,不知道该怎么改代码,求助大师们指点一下,多谢多谢。
解决方案 »
- 关于TextBox的选择文本问题
- 如何在c# winform 下连接SQL SERVER的OLAP多维数据集
- 100分求教:请问有没有办法让.NET不自动排版
- 文件拷贝的小小问题!
- WPF中调用C++COM组件中的函数导致页面卡怎么办???
- object的GetHashCode()返回的的哈希码,可以用来查找object吗?
- ComponentResourceManager构造函数参数,为什么不是一个form对象而是一个type?
- 谁能给我些用C#编写的一些数据库操作的例子,新手!谢100
- 谁能写个C#写的简易Winsock Proxy的代码?
- 控制台下这样访问数据库可以,怎末到类库里就不行了??
- C#求助,调用Excel函数Irr出错
- C++ 提供的DLL 参数为 char pszDesc[1024] 在C#中如何调用
你判断它发来的数据里有回车,就把清除状态设为true
每次数据来的时候,判断清除状态是否为true,是true则用=,否则用+=
然后将清除状态设为false,在判断新数据里是否有回车
{
try
{ System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; //引用它之后就不会有receiveedit.appendtext();运行时的线程错误了
int n = serialPort1.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
Received_Count += n;//增加接收计数
serialPort1.Read(buf, 0, n);//读取缓冲数据 builder.Clear();//清除字符串构造器的内容 builder.Append(Encoding.ASCII.GetString(buf));
//直接按ASCII规则转换成字符串
builder.Append(Encoding.ASCII.GetString(buf)); textBox1.AppendText(builder.ToString());//可以使用 textBox2.Text = (Received_Count - 1).ToString();
第四,我是刚入WPF的,我知道在WPF中你这么刷新前台控件是不行的。一个刚入行的新手,帮不了你太多。
代码是不会抛出异常了,但是程序 UI 表现照样会非常混乱地胡乱覆盖、丢失数据啊?!!本来使用 CheckForIllegalCrossThreadCalls 就是为了防止胡乱编程的,你怎么能给它设置为 false?
int currentReadLengh = 0;
int lastReadLengh = -1; while (gateComPort.BytesToRead != lastReadLengh)
{
currentReadLengh = gateComPort.BytesToRead;
lastReadLengh = currentReadLengh;
System.Threading.Thread.Sleep(20);
}
byte[] bytes = new Byte[lastReadLengh];
gateComPort.Read(bytes, 0, bytes.Length);
试下这样读取数据,确保每次拿到完整数据,根据你的操作舍弃或取得数据