private void button3_Click(object sender, EventArgs e)
        {
            Int32         result;
            StringBuilder errorText = new StringBuilder(maxErrorTextLen);

            //读完卡后,必须关闭设备。
            result          = Card2.CloseCardReader();
            textResult.Text = Convert.ToString(result);
            Card2.GetErrorTextW(errorText, maxErrorTextLen);
            textDescription.Text = errorText.ToString();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Int32         result;
            String        imagePath;
            StringBuilder errorText = new StringBuilder(maxErrorTextLen);

            if (image != null)
            {
                image.Dispose();
                image = null;
            }
            imagePath = Path.GetTempPath() + "image.bmp";
            //当程序打开设备后,可以多次调用读取信息函数。
            result          = Card2.GetPersonMsgW(ref person, imagePath);
            textResult.Text = Convert.ToString(result);
            Card2.GetErrorTextW(errorText, maxErrorTextLen);
            textDescription.Text = errorText.ToString();

            if (0 == result)
            {
                birthday   = ConvertDate(person.birthday, 1);
                validDate  = ConvertDate(person.validStart, 2) + "-";
                validDate += ConvertDate(person.validEnd, 2);
                image      = new Bitmap(imagePath);
            }
            else
            {
                birthday  = "";
                validDate = "";
            }

            tbName.Text     = person.name;
            tbSex.Text      = person.sex;
            tbBirthday.Text = person.birthday;
            tbAddress.Text  = person.address;
            tbCardId.Text   = person.cardId;
            if (image != null)
            {
                pbImage.Image = image;
            }
            Clipboard.Clear();
            Clipboard.SetText(person.cardId);
            // Invalidate();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Int32         result;
            StringBuilder errorText = new StringBuilder(maxErrorTextLen);

            /*参数1为端口号。1表示串口1,2表示串口2,依次类推。1001表示USB。0表示自动选择。
             * 参数2为标志位。0x02表示启用重复读卡。0x04表示读卡后接着读取新地址。
             * 各个数值可以用“按位或”运算符组合起来。
             * 参数3为波特率。使用串口阅读器的程序应正确设置此参数。出厂机器的波特率一般为115200。
             */
            result = Card2.OpenCardReader(1001, 2, 115200);
            if (result == 0)
            {
                textResult.Text = Convert.ToString(result);
                Card2.GetErrorTextW(errorText, maxErrorTextLen);
                textDescription.Text = errorText.ToString();
            }
            else
            {
                MessageBox.Show("设备连接失败!\n请检查并确认设备已正确连接", "设备连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }