Я хочу создать простое приложение, которое позволит мне проверить несколько параметров каждого кадра предварительного просмотра, но я застрял в запуске и остановил предварительный просмотр.
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
MediaCapture _MediaCapture;
bool _recording;
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached.
/// This parameter is typically used to configure the page.</param>
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
var rearCamera = devices[0];
if (devices.Count > 0)
{
rearCamera = devices.Single(currDev =>
currDev.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back
);
}
_MediaCapture = new MediaCapture();
await _MediaCapture.InitializeAsync(new MediaCaptureInitializationSettings() { VideoDeviceId = rearCamera.Id });
// this is CaptureElement
xCapture.Source = _MediaCapture;
_recording = false;
}
protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
if(_MediaCapture != null)
{
await _MediaCapture.StopPreviewAsync();
await _MediaCapture.StopRecordAsync();
_MediaCapture.Dispose();
_MediaCapture = null;
xCapture.Source = null;
}
base.OnNavigatedFrom(e);
}
// button click handler
private async void StartMeasure(object sender, RoutedEventArgs e)
{
if (_recording)
{
//await _MediaCapture.StopPreviewAsync();
_MediaCapture.VideoDeviceController.TorchControl.Enabled = false;
_recording = false;
}
else
{
//await _MediaCapture.StartPreviewAsync();
_MediaCapture.VideoDeviceController.TorchControl.Enabled = true;
_recording = true;
}
}
}
В этом виде он отлично работает.
Если я раскомментирую эти строки предварительного просмотра, он работает, но только один раз.
Если я нажму кнопку три раза: включи, выключи и снова, я получаю исключение в строке с включением TorchControl.
System.Exception: Исключение из HRESULT: 0xE801000D в Windows.Media.Devices.TorchControl.put_Enabled (логическое значение) в Pulsometr3.MainPage.d__d.MoveNext()
HRESULT меняется.
Что еще более странно, оно иногда замораживает телефон (например, 2 из 3 раза), и мне нужно удерживать Power + Volume Down.
Я попытался украсить все методы с помощью [STAThread], но это не помогло (http://technet.microsoft.com/en-ca/br226599).
Что еще более интересно, когда я выполняю операции с помощью debbuger, используя F10 для перехода по строкам, я могу переключать предварительный просмотр столько раз, сколько захочу. Это было ужасно, потому что отладчик держал все потоки, не так ли? Итак, в теории нет разницы?
Кроме того, телефон иногда зависает при развертывании... И это просто раздражает.
Любые идеи?