Почему WPFMediaKit VideoCaptureElement, созданный кодом, попадает в MediaFailed?

Я добавляю VideoCaptureElement к окну во время выполнения, но когда я запускаю этот код, он запускает MediaFailed. Но если я добавлю тот же элемент в XAML, он будет работать нормально, я могу видеть видео с камеры ноутбука. Я делаю что-то не так? Пожалуйста помоги!

public partial class MainWindow : Window
{
    WPFMediaKit.DirectShow.Controls.VideoCaptureElement VCE;

    public MainWindow()
    {
        InitializeComponent();

        VCE = new WPFMediaKit.DirectShow.Controls.VideoCaptureElement();
        Content = VCE;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        VCE.MediaOpened += VCE_MediaOpened;
        VCE.MediaFailed += VCE_MediaFailed;
        VCE.VideoCaptureDevice = WPFMediaKit.DirectShow.Controls.MultimediaUtil.VideoInputDevices[0];  // This is my laptop webcam
    }

    void VCE_MediaOpened(Object sender, RoutedEventArgs e) { ... }

    void VCE_MediaFailed(object sender, WPFMediaKit.DirectShow.MediaPlayers.MediaFailedEventArgs e) { ... }
}

1 ответ

Решение

У меня была похожая проблема с MediaUriElement, работающим в XAML, но не работающим при создании экземпляра в программном коде.

Решением для меня было инициировать контроль:

VCE.BeginInit();
VCE.EndInit();

Это будет соответствовать между созданием экземпляров (VCE = new...) и назначением (Content = VCE). Я не проверял ваш конкретный сценарий, но это похоже на ту же причину - должна быть некоторая дополнительная работа, выполняемая в Init, которая происходит автоматически при использовании XAML.

Другие вопросы по тегам