0

Windows CE の BarcodeScannerFacade に問題があります。私は顧客がデータと写真を含む「ケース」を作成できるアプリを持っています。顧客がバーコード スキャナーでバーコードをスキャンできるようにすることで、更新しようとしています。

さて、最初のケースは問題なく終了しましたが、2 番目のケースを開始すると、「不明なエラー」で例外がスローされるため、写真を撮ることができなくなりました。(CameraCaptureDialog.ShowDialog() メソッドが呼び出された直後に発生します)

再調査の結果、CCD に干渉するため、barcodeScanner を破棄する必要があることがわかりました。

これは、BarcodeScanner をインスタンス化する方法です。

barcodeScanner = BarcodeScannerFacade.GetBarcodeScanner();
barcodeScanner.BarcodeScan += new BarcodeScanner.BarcodeScanEventHandler(barcodeScanner_BarcodeScan);

上記の調査を踏まえて、コードに次の行を追加しました。

if (barcodeScanner != null) 
{
     barcodeScanner.Dispose();
}

唯一の問題は、呼び出されたときに NullReferenceException で終了することです。デバッガーに次のメッセージが表示されます。"NullReferenceException was unhandled" スタック トレースは次のとおりです。

- MyLibrary.SymbolBarcodeScanner.symbolReader_ReadNotify()
at TASK.Invoke()
- System.Windows.Forms.Control._InvokeAll()
- System.Windows.Forms.Control.WnProc()
- System.Windows.Forms.Control._InternalWnProc()
- Microsoft.AGL.Forms.EVL.EnterMainLoop()
- System.Windows.Forms.Application.Run()
- MyProgram.Program.Main()

BarcodeScanner.Dispose() 行を削除すると、例外で死ぬことはありませんが、もう一度写真を撮ることはできません。

どんな助けでも大歓迎です。

前もってありがとう、ロックバッグ

4

2 に答える 2

1

Terminate() メソッドを実装してみてください。

public override void Terminate()
{
    // If you have a scanner
    if(barcodeScanner  != null) 
    {
        barcodeScanner.ScanDeinit();

        // Any other necessary code for cleaning up...

        // Free it up
        barcodeScanner.Dispose();

        // Indicate that you no longer have a scanner
        barcodeScanner = null;
    }
}

これはさらに役立つかもしれません:
http://msdn.microsoft.com/en-us/library/aa446489.aspx

于 2013-01-07T10:21:51.860 に答える
0

Dispose メソッドの周りに try catch ブロックを追加する必要があります。例外をスローする外部コードを変更することはできません。

if (barcodeScanner != null) 
{
    try { //try to run the dispose method on the barcodescanner to free external resources
        barcodeScanner.Dispose();
    } catch(Exception ex) { 
        //Do some logging if needed
    }
}
于 2012-12-11T10:22:30.147 に答える