首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

使用C#开发基于Compact Framework程序时遇到疑难有关问题

2012-03-04 
使用C#开发基于Compact Framework程序时遇到疑难问题!我开发的设备是条码的扫描设备,厂家提供了一个SDK中

使用C#开发基于Compact Framework程序时遇到疑难问题!
我开发的设备是条码的扫描设备,厂家提供了一个SDK中有一个Reader类,我对这个类的包装如下:
        ///   <summary>
        ///   扫描类
        ///   </summary>
        public   class   BarcodeReader:IDisposable
        {
                public   Reader   reader   =   null;
                public   ReaderData   readerData   =   null;

                ///   <summary>
                ///   条码扫描完成后触发该事件
                ///   </summary>
                public   event   OnBarcodeOverHandler   OnBarcodeOver;

                public   BarcodeReader()
                {
                        if   (reader   ==   null)
                        {
                                reader   =   new   Reader();

                        }
                        if   (readerData   ==   null)
                        {
                                readerData   =   new   Symbol.Barcode.ReaderData(
Symbol.Barcode.ReaderDataTypes.Text,
Symbol.Barcode.ReaderDataLengths.MaximumLabel);
                        }
                        reader.ReadNotify   +=   new   EventHandler(reader_ReadNotify);
                        reader.Actions.Enable();
                        reader.Actions.Read(readerData);
                }


                private   void   reader_ReadNotify(object   sender,   EventArgs   e)
                {
                        if   (this.OnBarcodeOver   !=   null)
                        {
Symbol.Barcode.ReaderData   TheReaderData   =   this.reader.GetNextReaderData();
if   (TheReaderData.Result   ==   Symbol.Results.SUCCESS)
{
OnBarcodeOver(TheReaderData.Text);
}
                        }
reader.Actions.Read(readerData);//这个很关键,每次扫描成功后必需调用该方法才能使设备处于可扫描的状态.否则设备的激光头都不亮了
                }

我的程序中有窗体的基类FormBase,在FormBase中包含了BarcodeReader类的实例,且有下面的代码:


public   static   BarcodeReader   Barcode   =   null;
                static   ScanFormBase()
                {
                        Barcode   =   new   BarcodeReader();
                }
                public   virtual   void   Barcode_OnBarcodeOver(string   barcode)
                {
                        try
                        {
                                Control   c   =   GetFocusedControl;
                                TextBox   text   =   c   as   TextBox;
                                if   (text   !=   null)
                                        text.Text   =   barcode;
                                ComboBox   box   =   c   as   ComboBox;
                                if   (box   !=   null)
                                {
                                        if   (box.DropDownStyle   ==   ComboBoxStyle.DropDown)
                                        {
                                                box.Text   =   barcode;
                                        }
                                }
                                SetNextControlFocused();
                        }
                        catch   (NothingControlException)
                        {
                        }
                        catch   (Exception)
                        {
                                throw;


                        }
                }
                ///   <summary>
                ///   是否需要启用扫描
                ///   </summary>
                public   virtual   bool   NeedListenBarcode
                {
                        get
                        {
                                return   _needListenBarcode;
                        }
                        set
                        {
                                _needListenBarcode   =   value;
                                switch   (value)
                                {
                                        case   true:
                                                if   (_barcodeEvent   ==   null)
                                                {
                                                        _barcodeEvent   =   new   OnBarcodeOverHandler(Barcode_OnBarcodeOver);
                                                        Barcode.OnBarcodeOver   +=   _barcodeEvent;
                                                }
                                                break;
                                        case   false:
                                                if   (_barcodeEvent   !=   null)
                                                {


                                                        Barcode.OnBarcodeOver   -=   _barcodeEvent;
                                                        _barcodeEvent   =   null;
                                                }
                                                break;
                                }

                        }
                }

有两个窗体继承自FormBase,它们是Form1和Form2,其中Form1重写了ScanFormBase中的Barcode_OnBarcodeOver方法,其中最主要的是使用Form2的一个实例对象ShowDialog()了.

*************************现在的问题是:************************
设备每次执行完毕后,都必需
程序运行起来后显示了Form1,通过设备上的按钮触发了BarcodeReader的reader_ReadNotify方法(不是我调用的而是设备按钮触发的)后,调用了Form1的Barcode_OnBarcodeOver,这个方法里面我使Form2的实例对象ShowDialog.这造成的结果是BarcodeReader的reader_ReadNotify方法没有执行完毕,那么reader.Actions.Read(readerData);这句就没有执行,则Form2中无法打开扫描功能(原因见reader.Actions.Read(readerData)这句后面的注释).

有没有方法使得在BarcodeReader的reader_ReadNotify方法中引发事件后立即返回?而不是用等待事件执行完毕后再返回?

困扰我一下午了,等待热心网友.分不够再加.先在此谢过.

[解决办法]
不会,昨天才开始看Compact Framework。现在都还没搞清楚怎么在仿真器里连本机的sql数据库
- -!

热点排行