C# 试图在wpf中播放多个视频,但只播放了最后一个视频

C# 试图在wpf中播放多个视频,但只播放了最后一个视频,c#,C#,我不知道我做得是否正确。 在这里,我试图播放wpf C#中视频文件夹中的所有视频,但它只播放最后一个视频,我如何修复此问题 // Go to video folder. var videosFolder = KnownFolders.VideosLibrary; // Here i get all the files in the video folder. var files = await videosFolder.

我不知道我做得是否正确。 在这里,我试图播放wpf C#中视频文件夹中的所有视频,但它只播放最后一个视频,我如何修复此问题

        // Go to video folder.
        var videosFolder = KnownFolders.VideosLibrary;  

        // Here i get all  the files in the video folder.  
        var files = await videosFolder.GetFilesAsync(); 

        // If there is no file do nothing.
        if (files.Count == 0)  
        {  
            return;  
        }  

        // Here i  am looping all the videos.
        foreach (var video in files)  
        {  
            // Accessing each file in the video folder.
            var file = await StorageFile.GetFileFromPathAsync(video.Path);  
           // ...
            if (file == null)   
            {  
                return;  
            } 

            // Getting the path of a file.
            var source = MediaSource.CreateFromStorageFile(file); 

            // ... 
            VideoPlayer.SetPlaybackSource(source);  
        }  

在开始播放下一个视频之前,您不会等待每个视频完成。这就是为什么您只能看到最后一个视频实际播放。

您不必等待每个视频完成后才开始播放下一个视频。这就是为什么您只能看到最后一个实际播放。

您必须从订阅
MediaEnded
事件

在MediaElement完成音频或视频播放时发生

下面是一个示例代码(未测试!):


您必须从订阅
MediaEnded
事件

在MediaElement完成音频或视频播放时发生

下面是一个示例代码(未测试!):


这是什么
视频播放器
?你能提供一个例子吗?媒体元素表单xaml,很抱歉。我看不出有
SetPlaybackSource
method一切都正常,它只是一个循环,在继续循环和线程之前,它不会等待视频播放完。Sleep()不起作用,但我确实包含了system.Threading Namespace我坚持使用该类型,因为我怀疑它应该有一些接口(异步方法或事件),可以用来让您知道它何时完成播放,但我们无法知道,因为我们不知道确切的类型这是什么
视频播放器
?你能提供一个例子吗?媒体元素表单xaml,很抱歉。我看不出有
SetPlaybackSource
method一切都正常,它只是一个循环,在继续循环和线程之前,它不会等待视频播放完。Sleep()不起作用,但我确实包含了system.Threading名称空间我坚持使用该类型,因为我怀疑它应该有一些接口(异步方法或事件),可以用来让您知道它何时完成播放,但我们无法知道,因为我们不知道我尝试使用Thread.Sleep(持续时间)的确切类型我得到了一个错误,但我确实包含了system.threadingThanx。现在它工作了,我创建了一个名为“MediaPlaybackList MediaPlaybackList”的容器;在这里我可以存储所有的“MediaPlaybackItem MediaPlaybackItem”;然后在循环之后是“VideoPlayer.SetPlaybackSource(MediaPlaybackList);”。。谢谢你们的帮助我尝试过使用Thread.Sleep(duration)我遇到了一个错误,但我确实包含了system.ThreadingTanx现在它工作了我创建了一个名为“MediaPlaybackList MediaPlaybackList”的容器,在那里我可以存储所有的“MediaPlaybackItem MediaPlaybackItem”;然后在循环之后“VideoPlayer.SetPlaybackSource(MediaPlaybackList);” .. ..谢谢你们的帮助。现在开始工作了。我创建了一个名为“MediaPlaybackList MediaPlaybackList”的容器,在这里我可以存储所有的“MediaPlaybackItem MediaPlaybackItem”;然后在循环“VideoPlayer.SetPlaybackSource(MediaPlaybackList);”。。谢谢你们的支持help@Thembalethu听到这个消息我很高兴。如果您觉得我的答案有用,请将其标记为答案:)Thanx现在开始工作了,我创建了一个名为“MediaPlaybackList MediaPlaybackList”的容器;我可以在其中存储所有的“MediaPlaybackItem MediaPlaybackItem”;然后在循环之后是“VideoPlayer.SetPlaybackSource(MediaPlaybackList);”。。谢谢你们的支持help@Thembalethu听到这个消息我很高兴。如果您觉得我的答案有用,请将其标记为答案:)
// subscribe once
VideoPlayer.MediaEnded += OnMediaEnded;

private void OnMediaEnded(object sender, RoutedEventArgs e)
{
    var nextMediaSource = GetNextMediaSource();
    if(nextMediaSource != null)
        VideoPlayer.SetPlaybackSource(nextMediaSource);
}