У меня есть функция сканирования штрих-кода в моем приложении. На главной странице есть кнопка со штрих-кодом, пользователь нажимает ее и переходит на страницу сканирования штрих-кода . Но когда он возвращается назад, я получаю сообщение о том, что:
This instance has been disposed. Possibly because another component required a shared resource.
Я удалил PhotoCamera
и отменил все события в методе OnNavigatedFrom
на странице сканирования штрих-кода, но все равно получил то же самое.
Я вошел в код и обнаружил, что что-то не так с этим методом:
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);
}
}
}
Возникло исключение, и следом является трассировка стека:
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()
Есть идеи? Спасибо!