Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 条码扫描器处理异常_C#_.net_Windows Ce_Barcode_Image - Fatal编程技术网

C# 条码扫描器处理异常

C# 条码扫描器处理异常,c#,.net,windows-ce,barcode,image,C#,.net,Windows Ce,Barcode,Image,我在Windows CE中遇到BarcodeScannerFacade问题。 我有一个应用程序,客户可以在其中创建一个包含数据和图片的“案例”。 我正在尝试更新它,让客户能够用条形码扫描仪扫描条形码 现在,第一个案例结束得很好,没有问题,但是当我开始第二个案例时,我就不能再拍照了,因为它抛出了一个异常,带有一个“未知错误”。(它发生在调用CameraCaptureDialog.ShowDialog()方法之后) 经过一些研究,我发现我必须处理条形码扫描仪,因为它会干扰CCD 这是我如何实例化条形

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

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

经过一些研究,我发现我必须处理条形码扫描仪,因为它会干扰CCD

这是我如何实例化条形码扫描仪的:

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

您应该在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
    }
}

尝试实现Terminate()方法:

这可能会有进一步的帮助:

这也是我的第一个想法,我确实尝试将其封装在一个try-catch块中,但出现了相同的错误:(try-catch块仅用于通过抑制错误来保持应用程序运行。而不是修复条形码扫描程序代码中的错误,该错误是外部的,您无法控制。您只是尝试在条形码扫描程序崩溃之前尽可能多地处理该错误。任何人都仍然拥有指向条形码扫描程序的活动链接。)rticle?我几年前用过,但看起来MS删除了它,但它非常好。有人仍然有它的参考资料并愿意分享吗?
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;
    }
}