我有一个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更先进的东西吗?我只使用它,因为它很容易上手。