在WP8中的OnNavigatedFrom()方法中关闭相机

时间:2014-01-12 17:28:46

标签: c# windows-phone-8

我想确保当用户离开特定页面时,相机会被丢弃。

要打开相机,我拨打await AudioVideoCaptureDevice.OpenAsync()。但是,如果在OpenAsync()方法完成之前调用OnNavigatedFrom()方法,则无法丢弃相机,它将保持打开状态。

解决这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

从这里开始:https://github.com/slodge/BallControl/blob/master/Cirrious.Sphero.WorkBench/Cirrious.Sphero.WorkBench.UI.WindowsPhone/Views/SpheroView.xaml.cs

private AudioVideoCaptureDevice _cam;
...
     protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
        {
            _isNavigatingFrom = true;
            if (CameraIsRecording)
            {
/*
var task = DoStopRecording();
task.Start();
task.Wait();
*/
            }
            TheMoveJoystick.StopJoystick();
            ViewModel.AccelMovement.EnsureAccelerometerIsOnCommand.Execute(false);
            ViewModel.Speech.EnsureSpeechIsOn.Execute(false);
            ViewModel.AccelMovement.PropertyChanged -= AccelMovementOnPropertyChanged;
            _hackTimer.Stop();
            if (_cam != null)
            {
                _cam.Dispose();
                _cam = null;
            }
            _isNavigatingFrom = false;
            base.OnNavigatingFrom(e);
        }

答案 1 :(得分:0)

我会使用单例或静态管理器类进行此类操作,因此您可以调用该类来初始化相机,并随时关闭它。然后在那里,您可以在该类上保留一个标记,用于说明相机是否被取消,或类似的东西,这样它可以在异步方法后检查,如果相机被取消。

我希望这会有所帮助。