我有在文件夹中搜索视频的功能。对于该文件夹中的每个视频文件,我正在添加 MediaElement 并开始播放。当我有 cca 10 视频时,一切都很好。然后我添加了一些视频,将视图元素从网格更改为画布(因为性能),现在一些媒体元素没有显示(它们应该在的地方有空白)。这不是一个相同的视频。大多数情况下,这些发生在稍后处理的视频上,但并非总是如此。有谁知道哪里有问题?我认为这不是性能问题,因为其余视频都可以正常播放并且应用程序运行良好。那么有一些限制吗?或者我做错了什么?测试视频是 .wmv 和低质量 (320x240)。
看法:
<Canvas x:Name="mainCanvas">
<ScrollViewer HorizontalScrollBarVisibility="Auto" Width="1680" Height="750">
<Canvas x:Name="videoCanvas">
</Canvas>
</ScrollViewer>
</Canvas>
和 MainWindow.xaml.cs 中的代码
public MainWindow()
{
InitializeComponent();
this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Maximized;
getAllVideosFromFolder(System.IO.Path.GetFullPath(@"Videos\"));
}
private void getAllVideosFromFolder(string path)
{
try
{
var videoFiles = DirectoryHelper.GetFilesByExtensions(new DirectoryInfo(path), ".wmv", ".mp4", ".avi", ".mov");
int i = 0, j = 0;
foreach (var item in videoFiles)
{
MediaElement melem = createMediaElementForPreview(item.FileName);
Canvas.SetTop(melem, i * 250);
Canvas.SetLeft(melem, j * 340);
videoCanvas.Children.Add(melem);
i++;
if (i > 2)
{
i = 0;
j++;
}
videos.Add(videoClass);
}
videoCanvas.Width = j * 340;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private MediaElement createMediaElementForPreview(string sourcePath)
{
MediaElement melem = new MediaElement();
melem.LoadedBehavior = MediaState.Manual;
melem.Source = new Uri(sourcePath, UriKind.Relative);
melem.Width = 320;
melem.Height = 240;
melem.Volume = 0;
melem.Play();
melem.MouseDown += melem_MouseDown;
return melem;
}