0

我在 Windows CE 中遇到 BarcodeScannerFacade 的问题。我有一个应用程序,客户可以在其中创建一个包含数据和图片的“案例”。我正在尝试更新它,让客户能够使用条形码扫描仪扫描条形码。

现在,第一个案例结束得很好,没有问题,但是当我开始第二个案例时,我不能再拍照了,因为它会抛出一个“未知错误”的异常。(它发生在调用 CameraCaptureDialog.ShowDialog() 方法之后)

经过一番研究,我发现我必须处理barcodeScanner,因为它会以某种方式干扰CCD。

这就是我实例化 BarcodeScanner 的方式:

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

因此,鉴于上述研究,我在我的代码中加入了以下几行:

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

唯一的问题是它在被调用时死于 NullReferenceException。调试器有以下消息:“没有为任何调用堆栈帧加载符号。无法显示源代码。” “NullReferenceException 未处理”堆栈跟踪如下:

- 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() 行,它就不会出现异常,但话又说回来,我不能再拍照了。

任何帮助,将不胜感激。

提前致谢, Rockbag

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 回答