【发布时间】:2017-10-25 21:23:38
【问题描述】:
我正在为 Prism 应用程序的 MVVM 相机工作,并使用此方法在 CaptureElement 组件中显示预览
private async Task StartPreviewAsync(string deviceId)
{
try
{
_mediaCapture = new MediaCapture();
MediaCaptureInitializationSettings setting = new MediaCaptureInitializationSettings();
setting.VideoDeviceId = deviceId;
await _mediaCapture.InitializeAsync(setting);
//_displayRequest.RequestActive();
//DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape;
CaptureElementSource = _mediaCapture;
//This line throw exception
await _mediaCapture.StartPreviewAsync();
}
catch (UnauthorizedAccessException)
{
Debug.WriteLine("The app was denied access to the camera");
}
catch (Exception ex)
{
Debug.WriteLine("MediaCapture initialization failed. {0}", ex.Message);
}
}
这是我的 CaptureElement.Source 道具:
public MediaCapture CaptureElementSource
{
get { return _captureElementSouce; }
set { SetProperty(ref _captureElementSouce, value); }
}
我得到了这个例外:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Mateo.UILogic.ViewModels.CameraSelectionPageViewModel.<StartPreviewAsync>d__111.MoveNext()
请求的操作发生意外错误。预习 接收器未设置
任何人,请帮助我。
【问题讨论】:
-
只是好奇,为什么你把
MediaCapture放在你的视图模型中?我不认为MediaCapture属于视图模型。 -
@Scavenger 我尝试了各种方法,但 MediaCapture 只是在它的 Dispatcher 中运行,它只存在于后面的代码中。所以我已经在后面的代码上写了我的代码。 :D 就像你说的,媒体捕获不属于虚拟机