T! 2022-06-02 17:08 采纳率: 50%
浏览 127
已结题

C#问题,如何实现15693多卡重复查询,目前状态是,程序运行读卡器查询一次卡,然后就结束。 想要实现一直查询的状态。

C#问题,如何实现15693多卡重复查询,目前状态是,程序运行读卡器查询一次卡,然后就结束。
想要实现一直查询的状态。

        String PortName = "COM3";
        Int32 BaudRate = 115200;
        Byte value = reader.OpenSerialPort(PortName, BaudRate);
        if (value == 0x00)
        {

            ModulateMethod mm = ModulateMethod.ASK;
            InventoryModel im = InventoryModel.Multiple;
            Int32 TagCount = 0;
            String[] TagNumber = new String[1];
            Byte value2 = reader.Inventory(mm, im, ref TagCount, ref TagNumber);
            //Pay.Text = TagNumber[0];
            //if (value2 == 0x00)
            //{
            //    String TagNum= TagNumber[0].Trim();
            //    BlockLength bl = BlockLength.ShortBlock4Byte;
            //    Byte[] BlockData = new Byte[4];
            //    Byte value3 = reader.ReadSingleBlock(TagNum, bl, 0x00, ref BlockData);

            //    string Result = "";
            //    for (int i = 0; i < 4; i++)
            //    {
            //        Result += BlockData[i].ToString("X2");
            //    }
            //    Int32 Result2 =Convert.ToInt32(Result);
            int j = 0;
            while(j<4)
            {
                if (TagNumber[0] == "E00401508166084D")
                {
                    //Int32 PAY= 15;
                    //Num.Items.Add("肥牛套餐               *1                 ¥15");
                    //Pay.Text = "15";

                    oleDb.Open();
                    string sqlsearch = "select * from eat where 菜品名='蛋炒饭'";
                    OleDbCommand sqlcmd = new OleDbCommand(sqlsearch, oleDb);
                    OleDbDataReader read = sqlcmd.ExecuteReader();
                    while (read.Read())
                    {
                        //textBox1.Text= reader["菜品名"].ToString();
                        // textBox1.Text = reader["ID"].ToString();
                        Num.Items.Add(read["菜品名"].ToString());
                        List.Items.Add(read["数量"].ToString());
                        PAY.Items.Add(read["价格"].ToString());
                        //Num.Items.Add(read["价格"].ToString());
                         Pay.Text = read["价格"].ToString();
                    }
                    oleDb.Close();
                    break;
                }
                if (TagNumber[0] == "E0040150816555AF")
                {
                    oleDb.Open();
                    string sqlsearch = "select * from eat where 菜品名='牛肉面'";
                    OleDbCommand sqlcmd = new OleDbCommand(sqlsearch, oleDb);
                    OleDbDataReader read = sqlcmd.ExecuteReader();
                    while (read.Read())
                    {
                        //textBox1.Text= reader["菜品名"].ToString();
                        // textBox1.Text = reader["ID"].ToString();
                        Num.Items.Add(read["菜品名"].ToString());
                        List.Items.Add(read["数量"].ToString());
                        //LS1.Items.Add(reader["数量"].ToString());
                        PAY.Items.Add(read["价格"].ToString());
                        Pay.Text = read["价格"].ToString();
                    }
                    oleDb.Close();
                    break;
                }
  • 写回答

1条回答 默认 最新

  • 漫伊 2022-06-02 17:51
    关注

    读卡器,
    读写是 会有响应时间的,特别是当查询到数据时,对数据查询或者更新时,尽量异步更新或者开线程更新,这样 不会阻塞 设备读取的线程
    在定时器 或者 while 中,增加 Thread.Sleep(10),增加 读写间隔,

    大体 这样写 ,参考一下

           System.Timers.Timer timer;
            public void Start()
            {
                timer = new System.Timers.Timer();
                timer.Interval = 1000;// 读写间隔单位毫秒
                timer.Elapsed += Timer_Elapsed;
                timer.Enabled = true;
            }
     private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                //比如: 这是你的 读写器 的读取数据方法
                Byte value2 = reader.Inventory(mm, im, ref TagCount, ref TagNumber);
    
                if (true)// 在这里判断 value2 是否已经处理过
                {
                    // 在这里调用 数据 查询或者存储的 方法
                    ThreadPool.QueueUserWorkItem((p) => Oper_DB_Sql(value2));
                }
            }
    
           // 你的 数据处理方法
            private void Oper_DB_Sql(Byte value2)
            {
                if (TagNumber[0] == "E00401508166084D")
                {
                    //Int32 PAY= 15;
                    //Num.Items.Add("肥牛套餐               *1                 ¥15");
                    //Pay.Text = "15";
    
                    oleDb.Open();
                    string sqlsearch = "select * from eat where 菜品名='蛋炒饭'";
                    OleDbCommand sqlcmd = new OleDbCommand(sqlsearch, oleDb);
                    OleDbDataReader read = sqlcmd.ExecuteReader();
                    while (read.Read())
                    {
                        //textBox1.Text= reader["菜品名"].ToString();
                        // textBox1.Text = reader["ID"].ToString();
                        Num.Items.Add(read["菜品名"].ToString());
                        List.Items.Add(read["数量"].ToString());
                        PAY.Items.Add(read["价格"].ToString());
                        //Num.Items.Add(read["价格"].ToString());
                        Pay.Text = read["价格"].ToString();
                    }
                    oleDb.Close();
                    break;
                }
                if (TagNumber[0] == "E0040150816555AF")
                {
                    oleDb.Open();
                    string sqlsearch = "select * from eat where 菜品名='牛肉面'";
                    OleDbCommand sqlcmd = new OleDbCommand(sqlsearch, oleDb);
                    OleDbDataReader read = sqlcmd.ExecuteReader();
                    while (read.Read())
                    {
                        //textBox1.Text= reader["菜品名"].ToString();
                        // textBox1.Text = reader["ID"].ToString();
                        Num.Items.Add(read["菜品名"].ToString());
                        List.Items.Add(read["数量"].ToString());
                        //LS1.Items.Add(reader["数量"].ToString());
                        PAY.Items.Add(read["价格"].ToString());
                        Pay.Text = read["价格"].ToString();
                    }
                    oleDb.Close();
                    break;
                }
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月2日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分