Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
1280
Infragistics BarcodeReder strange behaviour 2.
posted

This question is an extension to Infragistics BarcodeReder strange behaviour.

While I got my question solved in the previous question then the barcode reader control still behaves strange.

I have been trying to fix this, but somehow it's like it doesn't really want what I want.

To explain the problem short then it is like this:

1st approach:
I have a file watcher which is starting a background worker every time there is a new file in a certain folder.
This background worker uses Infragistics BarcodeReader to decode a QR code.

This works good when there is only one new file in the folder at a time.

As soon as there are more than one file then a System.InvalidOperationException: The calling thread cannot access this object because a different thread owns it. is thrown at _barcodeReader.Decode(BitmapFromUri(new Uri(_fullPath))); . And the strange thing is that this exception is not thrown for all files, but only some of them. And every time it is another amount of exceptions.

ExpceptionMessage: The calling thread cannot access this object because a different thread owns it.
ExceptionBody: System.InvalidOperationException: The calling thread cannot access this object because a different thread owns it.
   at System.Windows.Threading.Dispatcher.VerifyAccess()
   at System.Windows.Media.Imaging.BitmapSource.get_DpiX()
   at Infragistics.Controls.Barcodes.ImageProcessing.CreateImageFromPixelsArray(Byte[][] data, ImageData imageData, Boolean isImageZoomed)
   at Infragistics.Controls.Barcodes.BarcodeReader.Decode(BitmapSource bitmap, Symbology symbologyTypes)
   at QrDecoderWpf.MyBarcodeReader.DecodeQr() in C:\Users\nawed\Desktop\WorkSpaceVS\TestApplication\QrDecoderWpf\MyBarcodeReader.cs:line 50

With this approach 50% of the QR codes were not giving any result and there were around 10% exceptions

2nd Approach:
This approach is not creating a background worker, and is using BarcodeReader directly to decode QR.
This approach is very slow and time consuming, therefor I prefer the 1st approach with the background worker.
With this approach there were no exceptions and the amount of QR codes decoded were around 90-95%, but around 10% of those 90% had a very strange code like 025, 343, 23425,25266 or 2525. Normally all our QR codes are formatted like DDCCDDDDDDDD.DDD.DD where D = digit (0-9) and C = character (A-Z).

This has frustrated me for very long time now, I hope you guys can help me out.

Thanks in advance!

A sample project with PDF's can be found here https://we.tl/hnKOJBjQ9R (Link available untill 24 November 2016)

Parents
No Data
Reply
  • 34510
    Offline posted

    Hello Nawed,

    I was able to reproduce your exception with the sample provided.  I was also able to reproduce the exception in my own simplified sample.  As a result I have logged a development issue for this.  The ID for that dev issue is 229007.  I also created a private support case for you where I have linked the dev issue to.  This will allow us to automatically notify you when the issue is resolved and available for download in a service release.  The case number is CAS-179039-Z9F5P3.

    While we resolve this issue in the product, I recommend that you try using the DecodeAsync method instead of calling Decode inside of a background thread.  The current issue is that we have some static elements inside the BarcodeReader that are used when you call Decode() and these static elements are not thread safe.  If you use DecodeAsync() however you can avoid this.  It may not be the solution for your application but for now it's the only way to get around this crash.

    As for long decode times when doing this synchronously, I recommend trying to crop the image so that it only includes the barcode you are trying to read.  Based on the 400 dpi setting you set in the inkspace export command the image is probably very large and the BarcodeReader needs to examine the whole thing looking for a barcode.  This will take some time.  You can speed this up a little by only providing the BarcodeReader with the QR code portion.  This image should be a lot smaller than a full page PDF at 400 dpi.

Children