Windows phone 8 WP8中PhotoCaptureDevice中的InvalidOperation异常

Windows phone 8 WP8中PhotoCaptureDevice中的InvalidOperation异常,windows-phone-8,camera,Windows Phone 8,Camera,当我调用Wait PhotoCaptureDevice时,windows phone 8摄像头应用程序中的OpenAsync(..)引发InvalidOperationException System.InvalidOperationException:由于以下原因,操作无效: 对象的当前状态。在 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerService

当我调用Wait PhotoCaptureDevice时,windows phone 8摄像头应用程序中的OpenAsync(..)引发InvalidOperationException

System.InvalidOperationException:由于以下原因,操作无效: 对象的当前状态。在 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()处 JPMC.Controls.CaptureTaskLauncher.d_6.MoveNext()---堆栈结束 从引发异常的上一个位置的跟踪---在 System.Runtime.CompilerServices.AsyncMethodBuilderCore.b_0(对象 国家}

但还有一件事是,每当我第一次运行相机测试时,它都会正常工作,即PhotoCaptureDevice正确初始化,但当我从另一页返回到相机测试时,它会给出上面提到的错误。 有人能帮我解决这个问题吗


谢谢

在离开页面之前,您是否尝试过使用PhotoCaptureDevice.Close()和Dispose()释放资源?

专用静态PhotoCaptureDevice d=null;
公共静态异步任务初始化Camera(CameraSensorLocation sensorLocation)
{
bool catchValue=true;
尝试
{
Field.Simple初始分辨率=新建Windows .Fask.Stand(640, 480);
WINDOWS .Base.大小预览分辨率=新建Windows .Fask.Stand(640, 480);
Fask.FaskCaseServer解决方案=新建Windows .Fask.Stand(640, 480);
d=等待光电捕获设备.OpenAsync(传感器位置,初始分辨率);
等待d.SetPreviewResolutionAsync(previewResolution);
等待d.SetCaptureResolutionAsync(captureResolution);
d、 SetProperty(KnownCameraGeneralProperties.PlayShutterSoundOnCapture,true);
MemoryStream stream=新的MemoryStream();
CameraCaptureSequence=d.CreateCaptureSequence(1);
sequence.Frames[0]。CaptureStream=stream.AsOutputStream();
等待d.PrepareCaptureSequenceAsync(序列);
等待序列。StartCaptureAync();
如果(stream.Length>0)
{
d、 处置();
d=零;
stream.Dispose();
流=空;
返回true;
}
其他的
{
d、 处置();
d=零;
stream.Dispose();
流=空;
}
返回false;
}
捕获(例外情况除外)
{
catchValue=false;
}
如果(!catchValue)
{
Field.Simple初始分辨率=新建Windows .Fask.Stand(640, 480);
WINDOWS .Base.大小预览分辨率=新建Windows .Fask.Stand(640, 480);
Fask.FaskCaseServer解决方案=新建Windows .Fask.Stand(640, 480);
d=等待光电捕获设备.OpenAsync(传感器位置,初始分辨率);
等待d.SetPreviewResolutionAsync(previewResolution);
等待d.SetCaptureResolutionAsync(captureResolution);
d、 SetProperty(KnownCameraGeneralProperties.PlayShutterSoundOnCapture,true);
MemoryStream stream=新的MemoryStream();
CameraCaptureSequence=d.CreateCaptureSequence(1);
sequence.Frames[0]。CaptureStream=stream.AsOutputStream();
等待d.PrepareCaptureSequenceAsync(序列);
等待序列。StartCaptureAync();
如果(stream.Length>0)
{
d、 处置();
d=零;
stream.Dispose();
流=空;
返回true;
}
其他的
{
d、 处置();
d=零;
stream.Dispose();
流=空;
}
返回false;
}
返回false;
}

是的,我已经试过了,但是没有用。之后还会抛出一个异常。然后您需要显示更多的代码(或者我应该说-至少是一些代码),以显示如何初始化PhotoCaptureDevice等。
 private static PhotoCaptureDevice d = null;
        public static async Task<bool> InitializeCamera(CameraSensorLocation sensorLocation)
        {
            bool catchValue = true;
            try
            {
                Windows.Foundation.Size initialResolution = new Windows.Foundation.Size(640, 480);
                Windows.Foundation.Size previewResolution = new Windows.Foundation.Size(640, 480);
                Windows.Foundation.Size captureResolution = new Windows.Foundation.Size(640, 480);
                d = await PhotoCaptureDevice.OpenAsync(sensorLocation, initialResolution);
                await d.SetPreviewResolutionAsync(previewResolution);
                await d.SetCaptureResolutionAsync(captureResolution);               
                d.SetProperty(KnownCameraGeneralProperties.PlayShutterSoundOnCapture, true);
                MemoryStream stream = new MemoryStream();                
                CameraCaptureSequence sequence = d.CreateCaptureSequence(1);
                sequence.Frames[0].CaptureStream = stream.AsOutputStream();
                await d.PrepareCaptureSequenceAsync(sequence);                
                await sequence.StartCaptureAsync();                            
                if (stream.Length > 0)
                {
                    d.Dispose();
                    d = null;
                    stream.Dispose();
                    stream = null;
                    return true;
                }
                else
                {
                    d.Dispose();
                    d = null;
                    stream.Dispose();
                    stream = null;
                }
                return false;
            }
            catch (Exception ex)
            {
                catchValue = false;
            }
            if (!catchValue)
            {
                Windows.Foundation.Size initialResolution = new Windows.Foundation.Size(640, 480);
                Windows.Foundation.Size previewResolution = new Windows.Foundation.Size(640, 480);
                Windows.Foundation.Size captureResolution = new Windows.Foundation.Size(640, 480);

                 d = await PhotoCaptureDevice.OpenAsync(sensorLocation,initialResolution);

                await d.SetPreviewResolutionAsync(previewResolution);
                await d.SetCaptureResolutionAsync(captureResolution);

                d.SetProperty(KnownCameraGeneralProperties.PlayShutterSoundOnCapture, true);
                MemoryStream stream = new MemoryStream();

                CameraCaptureSequence sequence = d.CreateCaptureSequence(1);
                sequence.Frames[0].CaptureStream = stream.AsOutputStream();
                await d.PrepareCaptureSequenceAsync(sequence);

                await sequence.StartCaptureAsync();

                if (stream.Length > 0)
                {
                    d.Dispose();
                    d = null;
                    stream.Dispose();
                    stream = null;
                    return true;
                }
                else
                {
                    d.Dispose();
                    d = null;
                    stream.Dispose();
                    stream = null;
                }
                return false;
            }
            return false;

        }