c# WPF 如何从媒体事件处理程序重复媒体元素播放,而不声明新源

本文关键字:媒体 元素 播放 新源 声明 WPF 程序 事件处理 | 更新日期: 2023-09-27 17:56:06

我正在WPF.中播放视频,我希望它循环播放,所以我所做的是当媒体事件触发时,我播放我的视频。 所以这会让我循环。 大概是你为什么我必须再次创建新源? 为什么我不能只叫"玩"?

出于某种原因,我不想在 XAML 中执行此操作。

看看我的代码片段:

string startPath System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

public Window1()
    {
        InitializeComponent();
        media.Source = new Uri(startPath + @"playlist.wpl");
        media.play();
    }
private void Media_Ended(object sender, EventArgs e)
    {
        media.Source = new Uri(startPath + @"playlist.wpl"); //if i dont put this line, video wont play..seems like it cant get the source
        media.Play();
    }

或者有没有一种正确的方法不是在 XAML 中循环而是在这里.cs文件中循环?

c# WPF 如何从媒体事件处理程序重复媒体元素播放,而不声明新源

不要在

Media_Ended处理程序开始时重置源,而是尝试将 Position 值设置回起始位置。 位置属性是一个时间跨度,所以你可能想要类似...

private void Media_Ended(object sender, EventArgs e)
{
    media.Position = TimeSpan.Zero;
    media.Play();
}

您甚至不需要将 LoadedBehavior 设置为手动,只需让它播放即可。

并重置您在媒体上的位置 媒体结束.

视频的新位置应大于零

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
     media.Position = TimeSpan.FromMilliseconds(1);
}

我让它可以设置UnloadedBehavior="Manual"和下面的代码

 private void gifAnimation_MediaEnded(object sender, RoutedEventArgs e)
 {
    gifAnimation.Position = new TimeSpan(0,0,1);
    gifAnimation.Play();
 }

将位置设置为零不起作用...

我认为你应该使用以下代码:

private void Media_Ended(object sender, EventArgs e)
{
   media.Position = TimeSpan.Zero;
   media.LoadedBehavior = MediaState.Play;
}

我希望这会有所帮助。

您不必再次设置源。只需将媒体元素的位置设置为media_ended事件的开头

 private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
        {
            ((MediaElement)(sender)).Stop();
            ((MediaElement)(sender)).Position = new TimeSpan(0, 0, 0);
            ((MediaElement)(sender)).Play();
        }

您可能需要将 MediaElement.LoadedBehavior 设置为手动

编辑

我尝试加载带有 REPEAT 标签的 asf 文件,并且它工作正常

<ASX version = "3.0">
   <TITLE>Simple ASX Demo</TITLE>
<REPEAT> 
      <ENTRY>
         <TITLE>Vista Butterfly Video</TITLE>
         <AUTHOR>Microsoft Corporation</AUTHOR>
         <COPYRIGHT>(c)2007 Microsoft Corporation</COPYRIGHT>
         <REF HREF = "Butterfly.wmv" />
     </ENTRY>
</REPEAT> 
</ASX>

但我认为mediaelement的内置播放列表处理机制存在一些缺陷。我建议遵循以下链接中提到的解决方法

http://blog.revolunet.com/index.php/general/wpf-mediaelement-asx-workaround

如果您有任何问题,请在此处发表评论