c#WPF如何在不声明新源的情况下从mediaended事件处理程序重复播放MediaElement?

时间:2011-05-12 08:34:51

标签: c# wpf events event-handling mediaelement

我在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中循环NOT但在此处.cs文件?

5 个答案:

答案 0 :(得分:15)

不要在Media_Ended处理程序的开头重置Source,而是尝试将Position值设置回起始位置。 Position属性是TimeSpan,因此您可能需要类似......

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

答案 1 :(得分:8)

您甚至不需要将LoadedBehavior设置为手动,只需将其保留为播放

在MediaEnded活动中,您应设置不等于零的视频新位置

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

答案 2 :(得分:6)

我使其工作设置Unloaded Behavior =“Manual”和以下代码

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

将位置设置为零无效...

答案 3 :(得分:1)

我认为你应该使用这段代码:

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

我希望这会有所帮助。

答案 4 :(得分:0)

您不必再次设置源。只需将mediaelement的位置设置为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设置为Manual

修改

我尝试使用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>

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

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

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