zoukankan      html  css  js  c++  java
  • 读码的逻辑设计

    读取扫码枪扫出的条码通常需要考虑以下问题:

    1、每次使用的码应该都是最新的有效的码。

    2、如果遇到跟上次一样的码,则不更新,反之则更新。

    3、需要对条码进行校验。

    4、如果操作人员忘记扫码,需要有机制能发现并提醒操作人。

    一般读码的设计通常有两种思路:

    ① 条码框接收到条码之后,存储该次条码,并立即清空条码框,便于下一次接收新条码。缺点是条码在条码框中出现的时间过短,不方便观察码有没有扫上、码对不对。

    ② 条码框接收到条码之后,存储该次条码,并自动选中条码框文本,便于下一次接收新条码冲掉文本框中的旧条码。缺点是偶尔忘记扫条码时,可能会错用上次的条码作为当前的条码。

    通常一个好的读码逻辑设计,需要同时结合这两种思路。

    例如可以这样做:

    1、软件启动后,立即开一个不断接收条码的线程,不断刷新接收到的条码。这里我采用的是不清空条码框,而是选中条码框文本的方式。

    接收并刷新条码线程的方法如下:

     1  private string code_Current = "";
     2  private string code_Last = "";
     3 
     4  private void RefreshBarCode()
     5         {
     6             while (true)
     7             {
     8                 Thread.Sleep(3);
     9 
    10                 string code_Text = tbx_productNameCode.Text;
    11                 
    12                 if (IsBarcodeValid(code_Text))
    13                 {
    14                     code_Current = code_Text;
    15                     if (code_Current != code_Last)
    16                     {
    17                         code_Last = code_Current;//"上次"的条码得到更新
    18                         if (tbx_productNameCode.InvokeRequired)
    19                         {                                                    
    20                             BeginInvoke(new Action(() => { tbx_productNameCode.Text = code_Current; }));
    21                             BeginInvoke(new Action(() => tbx_productNameCode.Focus()));
    22                             BeginInvoke(new Action(() => tbx_productNameCode.SelectAll()));
    23                         }
    24                         else
    25                         {
    26                             tbx_productNameCode.Text = code_Current;
    27                             BeginInvoke(new Action(() => tbx_productNameCode.Focus()));
    28                             BeginInvoke(new Action(() => tbx_productNameCode.SelectAll()));
    29                         }  
    30                     }
    31                     
    32                 }
    33                 //控制扫码间隔
    34                 Thread.Sleep(1200);
    35             }
    36         }

    (判断码是否有效的方法IsBarcodeValid()略。)

    2、当其他地方需要使用当前条码时,可以通过GetCurrentBarCode()方法去取条码:

    private string barCode = "";
    
    barCode = GetCurrentBarCode();
    
          //清空条码框,防止下一次重复扫入同一个码
          if (tbx_productNameCode.InvokeRequired)
          {
              BeginInvoke(new Action(() => tbx_productNameCode.Text = ""));//这一点非常关键!!!
              BeginInvoke(new Action(() => tbx_productNameCode.Focus()));
          }
          else
          {
              tbx_productNameCode.Text = "";
              tbx_productNameCode.Focus();
          }
    private string GetCurrentBarCode()
    {
        string code_temp = tbx_productNameCode.Text;
        if (IsBarcodeValid(code_temp))
        {
            return code_temp;
        }
        else
        {
            return "";
        }
    }
  • 相关阅读:
    【css基础修炼之路】— 谈谈元素的垂直水平居中
    git在linux安装步骤详解!!
    idea :不支持发行版本11问题
    centos7 升级gcc
    mysql--优化
    Docker安装
    使用idea从零编写SpringCloud项目-zuul
    使用idea从零编写SpringCloud项目-Hystrix
    使用idea从零编写SpringCloud项目-Feign
    使用idea从零编写SpringCloud项目-Ribbo
  • 原文地址:https://www.cnblogs.com/xh6300/p/6649094.html
Copyright © 2011-2022 走看看