我在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
答案 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
}
}