2012-03-27 2 views
0

Ich habe eine Barcode-Scan-Funktion in meiner App. Es gibt eine Barcode-Schaltfläche auf der Hauptseite, der Benutzer klickt darauf und geht zu Barcode-Scan-Seite. Aber wenn es navigiert zurück, erhalte ich ein Meldungsfeld sagen, dass:Instanz ist für freigegebene Ressource entsorgt, wenn aus der Barcode-Scan-Ansicht zurück navigieren

This instance has been disposed. Possibly because another component required a shared resource. 

I angeordnet, um die PhotoCamera und annulliert alle Ereignisse in der OnNavigatedFrom Methode auf dem Barcode-Scan-Seite, aber immer noch die gleiche Sache bekommen.

trat ich in den Code und fand etwas falsch mit dieser Methode:

PhotoCamera _cam; 
VideoBrush _videoBrush = new VideoBrush(); 
Stopwatch watch = new Stopwatch(); 
int _nbTry; 
Result result = null; 
void cam_AutoFocusCompleted(object sender, CameraOperationCompletedEventArgs e) 
     { 
      if (result == null) 
      { 
      try 
      { 
       _nbTry++; 
       watch.Reset(); 
       watch.Start(); 

       while ((result == null) && (watch.ElapsedMilliseconds < 1500) && _cam != null) 
       { 
        var binaryBitmap = GetBitmapFromVideo(_cam); 
        if (binaryBitmap != null) 
        { 
         try 
         { 
          result = BarCodeManager.ZXingReader.decode(binaryBitmap); 
         } 
         catch 
         { 
          // Wasn't able to find a barcode 
         } 
        } 
       } 

       if (result != null) 
       { 
        BarCodeManager._onBarCodeFound(result.Text); 
       } 
       else 
       { 
        if (_cam != null) 
        { 
         _cam.Focus(); 
        } 
       } 
      } 
      catch (Exception exc) 
      { 
       BarCodeManager._onError(exc); 
      } 
     } 
     } 

Es gibt eine Ausnahme abgefangen und nach wird der Stack-Trace:

at Microsoft.Devices.Camera.InvokeAndRemapExceptions(Action a) 
at Microsoft.Devices.PhotoCamera.get_IsFocusSupported() 
at Microsoft.Devices.PhotoCamera.Focus() 
at WP7.ScanBarCode.BarCode.cam_AutoFocusCompleted(Object sender, CameraOperationCompletedEventArgs e) 
at Microsoft.Devices.Camera.<>c__DisplayClass21`1.<SafeFireEvent>b__1f(Object ignored) 
at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.ThreadPool.WorkItem.doWork(Object o) 
at System.Threading.Timer.ring() 

Irgendwelche Ideen? Vielen Dank!

+0

Wenn der Emulator das Meldungsfeld anzeigt, können Sie den Callstack unterbrechen und einfügen? –

+0

Werfen Sie einen Blick auf meine Antwort! – MAXE

Antwort

2

Wenn Sie zum ersten Mal Barcode-Scan-Seite verlassen, werden Sie wahrscheinlich Ihre PhotoCamera entsorgen.

wenn Sie nur die PhotoCamera Objekt verfügen, wenn Sie die Barcode-Scan-Seite zurückkommen Sie diesen Fehler erhalten:

This instance has been disposed. Possibly because another component required a shared resource. 

Versuchen Sie, die PhotoCamera Objekt und auch alle Ereignisse Delegierten, wie Initialized zu entsorgen oder bezogen werden:

// Release the camera object: 
PhotoCamera.Dispose(); 

// Remove initialization event: 
PhotoCamera.Initialized -= PhotoCamera_Initialized; 

// For example, you must remove also the events linked to the camera management (e.g. when you press camera buttons): 
CameraButtons.ShutterKeyHalfPressed -= CameraButtons_ShutterKeyHalfPressed; 

Rufen Sie diese Entsorgung Code, wenn Sie erhalten in den OnNavigatedFrom e Entlüftung Ihrer Barcode-Scan-Seite, und alles sollte funktionieren!

Verwandte Themen