我正在开发一个pos机的读卡程序。利用厂家提供的dll函数,各个函数都已经验证完毕了。
在c#解决方案中,我在form的load事件中添加了com口的打开函数。如下: private void Form1_Load(object sender, EventArgs e)
        {
            int ret;
            ret = IniCom(1, 19200);//打开串口函数
            if (ret != 0)
            {
                MessageBox.Show("打开串口失败", "提示信息");
                return;
            }
            else
            {
                MessageBox.Show("打开串口成功", "提示信息");
            }
        }我在form中添加了一个按钮,在按钮的clicked事件中添加读卡程序,如下:
private void button1_Click(object sender, EventArgs e)
        {
            int ret = 0;
            StringBuilder CardNum = new StringBuilder(256);
            StringBuilder CardNum1 = new StringBuilder(256);
            StringBuilder CardID = new StringBuilder(256);
            int CardType = 1;
            StringBuilder ExpireDay = new StringBuilder(256);            ret = ReadCardInfo(1, CardNum, CardNum1, CardID, ref CardType, ExpireDay);            MessageBox.Show(ret.ToString(), "提示信息");
            if (ret != 0)
            {
                MessageBox.Show("读卡失败", "提示信息");
                return;            }
            else
            {
               MessageBox.Show(CardNum.ToString() , "提示信息");
           }
            
        }我在form的closing事件中添加了com口的关闭函数,如下:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            int ret = 0;
            ret = CloseCom(1);
            if (ret != 0)
            {
                MessageBox.Show("关闭串口失败", "提示信息");
                return;
            }
            else
            {
                MessageBox.Show("关闭串口成功", "提示信息");
            }
        }现在在运行程序以后,我每点击一次按钮都能成功读一次卡。
可是我现在的问题是,要求这个程序在运行时,随时都能读卡,而不需要人的参与,即不需要有点击按钮的动作。我该怎么做?望高手教我!

解决方案 »

  1.   

    厂家提供的dll中有查询状态的函数吧?
    放一个Timer,定时地查询状态,有卡插入的话自动读卡。
      

  2.   

    不能写到form的某个事件中吗?
    呵呵
    timer,有点不会用。
      

  3.   

    使用Timer控件, 或自已开辟一个线程用于读卡.
      

  4.   

    timer控件非常的简单,并且你的需要,用timer最好,效率和代码都很简捷。
      

  5.   

    timer控件,让他没一秒条用一次。。如果不会用。上网上找找,N多实例全代码的。。
    基本没什么问题了。。如果timer控件无法满足。那么你还可以做个随机数。不过也要用timer控件才能完成。。好了。。接分了楼主研究研究吧。
      

  6.   

    API应该提供插卡事件吧?在事件响应中读
      

  7.   

    Timer很容易使用,对你这样的情况下也是最简单的解决办法。
      

  8.   

    使用timer搞定。
    谢谢各位。