Windows phone 8 WP8中PhotoCaptureDevice中的InvalidOperation异常
当我调用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正确初始化,但当我从另一页返回到相机测试时,它会给出上面提到的错误。 有人能帮我解决这个问题吗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
谢谢在离开页面之前,您是否尝试过使用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;
}