日期:2014-05-18  浏览次数:21168 次

如何在Winform的页面中获取刷卡机中的数据并弹出窗口
各位童鞋,请教一个问题

  现在有个需求,想在winform页面中,只要客户刷卡了,就弹出一个窗口,在窗口中显示卡里的内容,请问怎么获取这个

事件?还是要开个新线程一直监听?

------解决方案--------------------
恩 我这是一个ID卡的读卡器的读卡登陆的代码 你可以参考一下.

C# code

//你的有个serialPort控件.

        /// <summary>
        /// serialPort的DataReceived事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            try
            {
                byte[] buffer = new byte[serialPort1.BytesToRead];
                serialPort1.Read(buffer, 0, buffer.Length);
                string strID = "";
                for (int i = 0; i < buffer.Length; i++)
                {
                    strID = strID + String.Format("{0:X2}", buffer[i]);
                }
                this.Invoke(interfaceUpdateHandle, strID);
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message, "读卡错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

//弄个委托
        delegate void HandleInterfaceUpdateDelegate(String text);
        HandleInterfaceUpdateDelegate interfaceUpdateHandle;
       public CPLoginForm()
        {
            InitializeComponent();
            interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(QueryIDCard);//读卡
            CloseSerialPort();//关闭serialPort
            OpenSerialPort();//开启serialPort
        }
 /// <summary>
        /// 检索Id卡
        /// </summary>
        /// <param name="strPass"></param>
        private void QueryIDCard(string strPass)
        {
            DataTable dt_id = GetID(strPass);//用读卡器传来的数据验证,这句话是连数据库的,你不用在意.
       if (dt_id.Rows.Count <= 0) MessageBox.Show("无效的ID卡!", "注意", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else
            {
                //验证通过,你可以做你喜欢的~
            }
        }
//关闭SerialPort
        private void CloseSerialPort()
        {
            if (this.serialPort1.IsOpen)
            {
                  
                Application.DoEvents();
                 
                serialPort1.Close();
                  
            }
        }
//打开串口
private void OpenSerialPort()
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    CloseSerialPort();
                }
                else
                {
                    serialPort1.Open();
                }


            }
            catch (Exception ex)
            {
                if (idts)
                {
                    MessageBox.Show("请更改配置文件中的串口设置,错误信息如下:\r\n" + ex.Message, "无法打开串口设备", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }



//以上为自己写的代码,功能倒是实现了,但是有点丑,请各位多指正.