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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)