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文件中循环?
不要在
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
如果您有任何问题,请在此处发表评论