背过手!
2017-05-23 09:00
采纳率: 60%
浏览 1.5k

C#窗体应用程序接收串口数据和上传数据库问题

我准备做个电子秤,硬件是一直往串口发数据,能接收过来并显示到控件上,但想做一个只要称到重量自动上传到数据库,这个怎么实现,我的思路是判断重量值一秒内是否变化,不变化就上传,不知道怎么实现或者有没有其他思路。主要就是自动选取有效数据并上传到数据库

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 兵工厂三剑客 2017-05-23 09:20
    已采纳

    你这做需求,由于需要一直接收。所以需要开启一个线程,这个线程里面加一个While循环。

    bool Flag=true;

    Thread thread=new Thread(new ThreadStart(delegate()
    {
    while(Flag)
    {
    //1.在这里接收串口数据并处理串口数据,转换成你需要的数据类型。如果没有数据就contiue

                            //2.判断是否有变化
    
    
                            //3.如果有变化就continue
    
                    //4.不变化就上传,这里最好用一个事件去触发操作数据库。
            }
    

    }));
    thread.Start();

    已采纳该答案
    打赏 评论
  • 兵工厂三剑客 2017-05-23 16:02

    首先说你的串口接收数据,串口接收数据主要有2种方式,一种是通过DataReceived事件;另一种是通过ReadExisting()方法。前者只要有串口数据就会触发
    事件进行接收。但是根据你的描述,串口一直在发,频率是多少,就看你硬件是如何设置的了,如果太快,再加上你要更新主界面,会造成卡顿的现象。所以推荐使用第2种。

    另外,你的思路里面有个漏洞,怎么去判断1秒内重量是否有变化?假如说一秒钟它的数据变化是10 11 9 10这4个数据,是不是就认为重量没变化呢?
    但实际上重量还是有变化的嘛。

    另外,不建议这么频繁的去操作数据库,你可以先将数据放到缓存或者集合当中,当达到一定数量的时候,再统一存到数据库中。这就像你让一个人去买水果,
    要买的水果有香蕉,梨子,桃子,苹果。你是让他去买了香蕉回来再去梨子,买了梨子回来再去买桃子,最后去买苹果;还是一次性买完呢。

    思路我前面已经提供了,就在while循环里面。

    1 打赏 评论

相关推荐 更多相似问题