自己写的wince平台下调用mc3100PDA扫描程序。可是实现连续扫描

摩托罗拉的MC3100的扫描读取条形码功能做的比较呆瓜。没有现在其他读取条形码PDA方便。MC3100的扫描读取条形码功能居然要自己调用官方的dll。之后把扫描结果保存在textbox或者txt等等中。代码如下:

需要引用:

using Symbol.Barcode;
using Symbol;


核心代码:

/// <summary>
        /// 定义一个读取器
        /// </summary>
        public Reader MyReader { get; set; }

        /// <summary>
        /// 定义一个存储读取数据的介质
        /// </summary>
        public ReaderData MyReaderData { get; set; }

        /// <summary>
        /// 定义委托
        /// </summary>
        public EventHandler MyEventHandler { get; set; }

        /// <summary>
        /// 获取到信息不需要通知
        /// </summary>
        public bool IsReadNotificationAttached { get; set; }

        /// <summary>
        /// 定义消息
        /// </summary>
        public string Message { get; set; }

        public delegate void UpdateUiDelegate();

        /// <summary>
        /// 扫描并把数据保存到textbox
        /// </summary>
        private void Scanning()
        {
            if (InitReader())
            {
                StartRead();
            }
            else
            {
                base.Close();
            }
        }

        /// <summary>
        /// 初始化扫描器
        /// </summary>
        /// <returns></returns>
        private bool InitReader()
        {
            if (this.MyReader != null)
            {
                return false;
            }
            try
            {
                if (Symbol.Barcode.Device.AvailableDevices.Length <= 1)
                {
                    this.MyReader = new Symbol.Barcode.Reader();
                }
                this.MyReaderData = new ReaderData(ReaderDataTypes.Text, ReaderDataLengths.MaximumLabel);
                this.MyEventHandler = new EventHandler(this.MyReader_ReadNotify);
                this.MyReader.Actions.Enable();
                this.MyReader.Parameters.Feedback.Success.BeepTime = 0;
                this.MyReader.Parameters.Feedback.Success.WaveFile = @"\windows\alarm3.wav";
                base.Activated += new EventHandler(this.ReaderFormActivated);
                base.Deactivate += new EventHandler(this.ReaderFormDeactivate);
                return true;
            }
            catch (Exception ex)
            {
                //这里需要记录日志
                Message = "InitReader方法出现问题:" + ex.Message;
                return false;
            }
        }

        /// <summary>
        /// 委托读取数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MyReader_ReadNotify(object sender, EventArgs e)
        {
            var TheReaderData = this.MyReader.GetNextReaderData();
            if (TheReaderData.Result == Results.SUCCESS)
            {
                this.HandleData(TheReaderData);
                this.StartRead();
            }
            else
            {
                string sMsg = "Read Failed\nResult = " + TheReaderData.Result.ToString();
                this.Message = sMsg;
                if (TheReaderData.Result == Results.E_SCN_READINCOMPATIBLE)
                {
                    sMsg = "The application will now exit.";
                    this.Message = sMsg;
                    base.Close();
                }
            }
        }

        /// <summary>
        /// 根据保存器中的数据循环赋值给textbox
        /// </summary>
        /// <param name="theReaderData"></param>
        private void HandleData(Symbol.Barcode.ReaderData theReaderData)
        {
            foreach (Control c in base.Controls)
            {
                if ((c is TextBox) && c.Focused)
                {
                    var tb = (TextBox)c;
                    tb.Text = theReaderData.Text;
                    base.SelectNextControl(tb, true, true, true, true);
                }
            }
        }

        /// <summary>
        /// 开始扫描
        /// </summary>
        private void StartRead()
        {
            if ((this.MyReader != null) && (this.MyReaderData != null))
            {
                try
                {
                    if (!this.IsReadNotificationAttached)
                    {
                        this.MyReader.ReadNotify += this.MyEventHandler;
                        this.IsReadNotificationAttached = true;
                    }
                    this.MyReader.Actions.Read(this.MyReaderData);
                }
               catch(Exception ex)
               {
                   //这里需要记录日志
                   Message = "StartRead方法出错:" + ex.Message;
               }
            }
        }


        private void ReaderFormActivated(object sender, EventArgs e)
        {
            if (!this.MyReaderData.IsPending)
            {
                this.StartRead();
            }
        }

        /// <summary>
        /// 扫描窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ReaderFormDeactivate(object sender, EventArgs e)
        {
            this.StopRead();
        }

        /// <summary>
        /// 停止扫描
        /// </summary>
        private void StopRead()
        {
            if (this.MyReader != null)
            {
                try
                {
                    if (this.IsReadNotificationAttached)
                    {
                        this.MyReader.ReadNotify -= this.MyEventHandler;
                        this.IsReadNotificationAttached = false;
                    }
                    this.MyReader.Actions.Flush();
                }
               catch(Exception ex)
               {
                   Message = "StopRead方法出错,出错信息是:" + ex.Message;
               }
            }
        }


在调用的时候只需要用到:

/// <summary>
        /// 加载扫描
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SendProduct_Load(object sender, EventArgs e)
        {
            txtExpress.Text = FormBase.ExpressName;
            txtOrderId.Focus();
            Scanning();

        }


完事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值