WP7 BarcodeManager - 无效的跨线程访问

rpf*_*rpf 2 c# barcode-scanner windows-phone-7

我正在尝试使用Windows Phone 7 Silverlight ZXing条码扫描库,但我遇到了一些问题.

我正在使用后台工作人员检查图像,但是当我这样做时:

WP7BarcodeManager.ScanBarcode(this.Image, BarcodeResults_Finished);
Run Code Online (Sandbox Code Playgroud)

代码抛出异常:无效的跨线程访问.

这是我的代码......

void photoChooserTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            ShowImage();

            System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
            bmp.SetSource(e.ChosenPhoto);

            imgCapture.Source = bmp;
            this.Image = new BitmapImage();
            this.Image.SetSource(e.ChosenPhoto);

            progressBar.Visibility = System.Windows.Visibility.Visible;
            txtStatus.Visibility = System.Windows.Visibility.Collapsed;

            worker.RunWorkerAsync();
        }
        else
            ShowMain();
    }

void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                Thread.Sleep(2000);

                WP7BarcodeManager.ScanMode = com.google.zxing.BarcodeFormat.UPC_EAN;
                WP7BarcodeManager.ScanBarcode(this.Image, BarcodeResults_Finished);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Error processing image.", ex);
            }
        }
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

thu*_*eys 6

使用在DispatcherUI线程上执行代码而不是在后台线程上:

Deployment.Current.Dispatcher.BeginInvoke(()=>
    { 
         WP7BarcodeManager.ScanBarcode(this.Image, BarcodeResults_Finished);
   });
Run Code Online (Sandbox Code Playgroud)

某些操作需要在UI线程上运行,并且无法在后台线程上运行.