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

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日

悬赏问题

  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥20 双系统开机引导中windows系统消失问题?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方
  • ¥15 关于生产日期批次退货退款,库存回退的问题