Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-一次播放mediaelement的限制_C#_Wpf_Performance_Mediaelement - Fatal编程技术网

C# WPF-一次播放mediaelement的限制

C# WPF-一次播放mediaelement的限制,c#,wpf,performance,mediaelement,C#,Wpf,Performance,Mediaelement,我有在文件夹中搜索视频的功能。对于该文件夹中的每个视频文件,我将添加MediaElement并开始播放。当我有CCA10视频时,一切都很好。然后我添加了一些视频,将视图元素从网格更改为画布(因为性能),现在一些mediaelement没有显示(它们应该在空白处)。这不是一个相同的视频。大多数情况下,这些都发生在稍后处理的视频上,但并不总是如此。有人知道哪里会出问题吗?我认为它的性能没有问题,因为其他视频播放正常,应用程序运行良好。那么是否存在一些限制?或者我做错了什么?测试视频为.wmv和低质量

我有在文件夹中搜索视频的功能。对于该文件夹中的每个视频文件,我将添加MediaElement并开始播放。当我有CCA10视频时,一切都很好。然后我添加了一些视频,将视图元素从网格更改为画布(因为性能),现在一些mediaelement没有显示(它们应该在空白处)。这不是一个相同的视频。大多数情况下,这些都发生在稍后处理的视频上,但并不总是如此。有人知道哪里会出问题吗?我认为它的性能没有问题,因为其他视频播放正常,应用程序运行良好。那么是否存在一些限制?或者我做错了什么?测试视频为.wmv和低质量(320x240)

视图:


没问题。MediaElement是个垃圾,有很多灾难性的bug。只要你只使用一种媒体元素和质量不好的视频就可以了


求助于您自己的DirectShow解决方案或查看WPF MediaKit。

没有问题。MediaElement是个垃圾,有很多灾难性的bug。只要你只使用一种媒体元素和质量不好的视频就可以了


求助于您自己的DirectShow解决方案或查看WPF MediaKit。

我将此问题保留了一段时间,但您可能是对的。现在,我正在尝试MediaKit。您是否尝试了仅在代码中创建MediaUriElement?我可以在xaml中创建播放视频,但在所有代码中我都有问题。没有显示任何内容,也没有错误消息。我在codeplax的讨论中发现了同样的问题,但还没有找到在代码中创建MediaUriElement的示例。MediaUriElement可以在代码中创建。设置属性前后必须有
BeginInit()
EndInit()
方法。谢谢你。MediaKit真的很好用。我把它打开了一段时间,但你可能是对的。现在,我正在尝试MediaKit。您是否尝试了仅在代码中创建MediaUriElement?我可以在xaml中创建播放视频,但在所有代码中我都有问题。没有显示任何内容,也没有错误消息。我在codeplax的讨论中发现了同样的问题,但还没有找到在代码中创建MediaUriElement的示例。MediaUriElement可以在代码中创建。设置属性前后必须有
BeginInit()
EndInit()
方法。谢谢你。MediaKit真的很好用。
<Canvas x:Name="mainCanvas">
            <ScrollViewer HorizontalScrollBarVisibility="Auto" Width="1680" Height="750">
                <Canvas x:Name="videoCanvas">
                </Canvas>
            </ScrollViewer>
</Canvas>
 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;
    }