Сбой инициализации UWP MediaCapture

Я разрабатываю приложение WPF, в котором я записываю аудиоданные с помощью класса Windows.Media.Capture.MediaCapture. Он работает, если я инициализирую с параметрами или без них:

var mediaCapture = new MediaCapture();
await mediaCapture.InitializeAsync();

или я могу добавить, какой микрофон использовать (если их больше одного):

var allAudioDevices = await DeviceInformation.FindAllAsync(DeviceClass.AudioCapture);
DeviceInformation microphone = allAudioDevices.FirstOrDefault();

MediaCaptureInitializationSettings mediaInitSettings = new MediaCaptureInitializationSettings {
    AudioDeviceId = microphone.Id,
    StreamingCaptureMode = StreamingCaptureMode.Audio
};

await _mediaCapture.InitializeAsync(mediaInitSettings);

Проблема возникает, когда я запускаю свое приложение как приложение UWP (с настольным мостом). Как приложение UWP, когда оно вызывает метод InitializeAsync(), оно всегда выдает исключение со следующим (подробным :)) сообщением об ошибке: Element not found. Объект DeviceInformation микрофона найден правильно, поэтому что-то происходит во время инициализации метода MediaCapture.

Возможность микрофона задается в файле манифеста проекта моста.

Что я делаю не так? Я также открыт для использования других методов записи голоса.


person Attila Szász    schedule 14.11.2019    source источник
comment
Я попробовал ваш код, но мы не смогли воспроизвести вашу проблему, не могли бы вы поделиться минимально воспроизводимым примером, который мог бы воспроизвести эту проблему .   -  person Nico Zhu - MSFT    schedule 14.11.2019
comment
Тем временем я понял, что если я запускаю инициализацию в потоке пользовательского интерфейса, появляется всплывающее окно, которое запрашивает у пользователя разрешение на доступ к микрофону. Если я даю доступ, остальное работает нормально.   -  person Attila Szász    schedule 15.11.2019
comment
Отлично! Опубликуйте свое решение ниже и отметьте его как принятое для удобства людей, которые посетят эту ветку позже.   -  person Nico Zhu - MSFT    schedule 15.11.2019


Ответы (1)


Я понял, что если я запускаю инициализацию в потоке пользовательского интерфейса, он работает хорошо:

await Application.Current.Dispatcher.InvokeAsync(async () => {
    await mediaCapture.InitializeAsync();
});
person Attila Szász    schedule 18.11.2019