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!
Wenn der Emulator das Meldungsfeld anzeigt, können Sie den Callstack unterbrechen und einfügen? –
Werfen Sie einen Blick auf meine Antwort! – MAXE