Ошибка камеры UWP: указан недопустимый номер потока. PreviewState

Мое приложение UWP выдает "UnhandledException" с сообщением:

Предоставленный номер потока недействителен. Состояние предварительного просмотра.

Приложение выполняет 2 операции:

  • сделать снимок (с помощью MediaCapture и с предварительным просмотром в CaptureElement)
  • сканирование: чтение QR-кода (используя Zxing.Net.Mobile)

2 операции отлично работают по отдельности.

Проблема возникает, когда я сначала «сканирую» (с предварительным просмотром с камеры, управляемой Zxing), затем закрываю предварительный просмотр «сканирования», открываю страницу предварительного просмотра фотографий и поворачиваю телефон. «Вращение» вызывает исключение.

Я написал очень простое приложение для воспроизведения исключения:

MainPage.xaml

<Button Content="Scan" Click="Scan_Click" />
<Button Content="Photo" Click="Photo_Click" />

MainPage.xaml.cs

    private async void Scan_Click(object sender, RoutedEventArgs e)
    {
        MobileBarcodeScanner scanner = new MobileBarcodeScanner();
        var result = await scanner.Scan();
    }

    private void Photo_Click(object sender, RoutedEventArgs e)
    {
        Frame.Navigate(typeof(PhotoPage));
    }

PhotoPage.xaml

<CaptureElement Name="PreviewControl" Stretch="Uniform"/>

PhotoPage.xaml.cs

    MediaCapture _mediaCapture;

    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        DeviceInformationCollection videoCaptureDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
        var camera = (from webcam in videoCaptureDevices
                      where webcam.EnclosureLocation != null
                      && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back
                      select webcam).FirstOrDefault();

        _mediaCapture = new MediaCapture();
        await _mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id });
        PreviewControl.Source = _mediaCapture;
        await _mediaCapture.StartPreviewAsync();
    }

Действия по воспроизведению ошибки следующие:

  • нажмите кнопку сканирования
  • нажать кнопку "Назад" телефона
  • нажмите кнопку "Фото"
  • повернуть телефон

Благодарю вас!


person Stefano    schedule 03.06.2016    source источник


Ответы (1)


Я нашел решение на странице проблемы ZXing.Net.Mobile: https://github.com/Redth/ZXing.Net.Mobile/issues/294

Код, размещенный по адресу https://github.com/Redth/ZXing.Net.Mobile/blob/master/Source/ZXing.Net.Mobile.WindowsUniversal/ScanPage.xaml.cs помогите мне решить проблему.

person Stefano    schedule 09.06.2016