条形码扫描仪处理异常

时间:2012-12-11 09:58:43

标签: c# .net windows-ce barcode image

我在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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
    }
}