C#WPF在不在自己的窗口中时将视频播放器放在自己的线程中

时间:2016-11-07 10:55:53

标签: c# wpf multithreading video

我有一个C#WPF应用程序,可以使用Windows中的MediaElements在单独的窗口中打开几个同步视频。

当我在同一个UI线程上运行所有视频时,我遇到了一些性能问题(帧速率),所以我想把每个窗口放在自己的线程中并使用自己的调度程序

    public void ShowVideoWindow(string source)
    {
        if (!_videoWindows.ContainsKey(source))
        {
            Thread videoThread = new Thread(delegate ()
            {
                VideoWindow videoWindow = new VideoWindow(source);
                videoWindow.Closed += VideoWindow_Closed;
                videoWindow.Show();

                _videoWindows[source] = videoWindow;

                System.Windows.Threading.Dispatcher.Run();
            });

            videoThread.IsBackground = true;
            videoThread.SetApartmentState(ApartmentState.STA); // needs to be STA or throws exception
            videoThread.Name = source + " - video";
            videoThread.Start();
        }
    }

这非常有效。每个视频窗口运行良好,我只需要小心,我只能通过调用正确的调度程序来访问其他窗口。

问题是我不希望这些窗口完全分开。我想使用可停靠窗口作为AvalonDock的一部分。有没有办法让我只让视频控件在一个单独的线程中运行?我应该使用比MediaElement更先进的东西吗?我只使用它,因为它很容易上手。

0 个答案:

没有答案