2

ライブラリのEMDK2.5(VS2008とVC#および.NetCF3.5)Barcode2クラスを使用して、バーコードをスキャンするサンプルアプリケーションを作成しています。EMDKで利用可能なサンプル(CS_Barcode2Sample1プロジェクト)に従いました。ハードウェアでスキャンをトリガーするたびに、通知「E_SCN_READINCOMPATIBLE」がスローされ、スキャンされたデータを取得できません。ドキュメントには、E_SCN_READINCOMPATIBLE通知の原因についてはあまり記載されておらず、Google検索からの運もありません。Symbol.Barcodeを使用するなど、いくつかのオプションを試しましたが、結果は同じです。EMDK 2.3も試しましたが、結果は同じです。

ここにコード全体を貼り付けました。

public partial class Form1 : Form
    {
        private Barcode2 myBarcode2 = null;

        public Form1()
        {
            InitializeComponent();
            InitBarcode();
        }

        public bool InitBarcode()
        {
            // If the Barcode2 object is already initialized then fail the initialization.
            if (myBarcode2 != null)
            {
                return false;
            }
            else // Else initialize the reader.
            {
                try
                {

                    Symbol.Barcode2.Device[] AvailableDevices = Symbol.Barcode2.Devices.SupportedDevices;
                    if (AvailableDevices.Length == 0)
                    {
                        return false;
                    }

                    if (AvailableDevices.Length == 1)
                    {
                        //get the first available scanner in the list
                        Symbol.Barcode2.Device MyDevice = AvailableDevices[0];
                        // Create the reader, based on selected device.
                        myBarcode2 = new Barcode2(MyDevice);

                        // Attach a scan notification handler.
                        //this.myScanNotifyHandler = new Barcode2.OnScanHandler(myBarcode2_ScanNotify);
                        myBarcode2.OnScan += myBarcode2_ScanNotify;

                        // Attach a status notification handler.
                        //this.myStatusNotifyHandler = new Barcode2.OnStatusHandler(myBarcode2_StatusNotify);
                        myBarcode2.OnStatus += myBarcode2_StatusNotify;
                        myBarcode2.Config.TriggerMode = TRIGGERMODES.HARD;

                        // Submit a scan.
                        myBarcode2.Scan(5000);
                      }
                }
                catch (OperationFailureException ex)
                {
                    MessageBox.Show("Exception Raised 1");
                    return false;
                }
                catch (InvalidRequestException ex)
                {
                    MessageBox.Show("Exception Raised 2");
                    return false;
                }
                catch (InvalidIndexerException ex)
                {
                    MessageBox.Show("Exception Raised 3");
                    return false;
                }
            }
            return false;
        }

        private void myBarcode2_ScanNotify(ScanDataCollection scanDataCollection)
        {
            // Checks if the BeginInvoke method is required because the OnScan delegate is called by a different thread
            if (this.InvokeRequired)
            {
                // Executes the OnScan delegate asynchronously on the main thread
                this.BeginInvoke(new Barcode2.OnScanHandler(myBarcode2_ScanNotify), new object[] { scanDataCollection });
            }
            else
            {
                // Get ScanData
                ScanData scanData = scanDataCollection.GetFirst;

                int i;
                switch (scanData.Result)
                {
                    case Symbol.Barcode2.Results.SUCCESS:
                        String str = scanData.Text;
                        myBarcode2.Config.TriggerMode = TRIGGERMODES.HARD;
                        myBarcode2.Scan(5000);
                        break;

                    case Symbol.Barcode2.Results.E_SCN_READTIMEOUT:
                        break;

                    case Symbol.Barcode2.Results.CANCELED:
                        break;

                    case Symbol.Barcode2.Results.E_SCN_DEVICEFAILURE:
                        i = 93;
                        break;

                    default:
                        if (scanData.Result == Symbol.Barcode2.Results.E_SCN_READINCOMPATIBLE)
                        {
                            // If the failure is E_SCN_READINCOMPATIBLE, exit the application.
                            MessageBox.Show("Fatal Error");
                            this.Close();
                            return;
                        }
                        break;
                }
            }
        }

        private void myBarcode2_StatusNotify(StatusData statusData)
        {
            // Checks if the Invoke method is required because the OnStatus delegate is called by a different thread
            if (this.InvokeRequired)
            {
                // Executes the OnStatus delegate on the main thread
                this.Invoke(new Barcode2.OnStatusHandler(myBarcode2_StatusNotify), new object[] { statusData });
            }
            else
            {
                int i;
                switch (statusData.State)
                {
                    case States.IDLE:
                        break;

                    case States.READY:
                        break;

                    default:
                        break;
                }
            }
        }
    }
}
4

1 に答える 1

3

私も最近これを経験しましたが、私が観察したように、おそらくスキャン要求が既にキューに入れられているスキャナーデバイスが他のアプリケーションによって占有されているため、メモリ管理に移動し、疑わしいアプリを強制終了して試してくださいあなたのアプリをもう一度。

シンボル FAQを参照してください

于 2012-10-05T02:36:55.720 に答える