各位童鞋,请教一个问题    现在有个需求,想在winform页面中,只要客户刷卡了,就弹出一个窗口,在窗口中显示卡里的内容,请问怎么获取这个事件?还是要开个新线程一直监听?

解决方案 »

  1.   

    能把你的代码贴出来么?还是说你想要读卡的代码?你的卡类型?serialPort控件读数据收到以后直接弹窗就可以了?你到底想问什么?
      

  2.   

    恩 我这是一个ID卡的读卡器的读卡登陆的代码 你可以参考一下.
    //你的有个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);
                    }
                }
            }//以上为自己写的代码,功能倒是实现了,但是有点丑,请各位多指正.
      

  3.   

    哦,我貌似忘记了点什么.
     你需要在之前,设置SerialPort这个控件的COM口号和波特率什么的.你可以选择直接在前台页面选择SerialPort的属性栏里面设置,或者直接在后台通过SerialPort的.点出属性.嗯,就这么多.
      

  4.   

    serialPort控件需不需要设置端口号之类的属性啊?如果刷卡机有COM口和USB口之分,那实现有什么区别吗?
      

  5.   

    你这家伙到底有没有仔细看6楼的话啊...USB一般都是模拟COM口的 你要是不会看可以用超级终端调试一下.