我在媒体元素中播放了一个视频文件。我需要继续播放它,因此我尝试了:
me.play();
me.MediaEnded += new RoutedEventHandler(me_MediaEnded);
使用此事件方法:
//loop to keep video playing continuously
void me_MediaEnded(object sender, EventArgs e)
{
//play video again
me.Play();
}
但是以上内容不会重播视频文件。为什么?我做错了什么?
根据post on MSDN:
Play()从当前位置开始,因此您必须首先转到起点,然后再次播放。
因此您必须在重播之前重置位置:
me.Position = TimeSpan.FromSeconds(0);
me.Play();
您还可以使用情节提要(Storyboard)来控制和循环播放视频,而无需挂钩事件或执行任何代码隐藏工作。这是MSDN上推荐的解决方案,是用于MVVM设计的更优雅,更合适的解决方案。
在此处阅读有关MSDN的更多信息,包括示例:
http://msdn.microsoft.com/en-us/library/ms741866%28v=vs.100%29.aspx
我知道要使用它:
class MyMediaPlayer : MediaPlayer
{
private bool looping;
public MyMediaPlayer() : base()
{
looping = false;
base.MediaEnded += new EventHandler(mediaEnded);
}
public MyMediaPlayer(string _file) : base()
{
looping = false;
base.Open(new Uri(_file, UriKind.Relative));
base.MediaEnded += new EventHandler(mediaEnded);
}
public bool Looping
{
get { return looping;}
set { looping = value; }
}
public void playLooping()
{
looping = true;
base.Play();
}
public void playLooping(string _file)
{
looping = true;
base.Open(new Uri(_file, UriKind.Relative));
base.Play();
}
public void play()
{
looping = false;
base.Play();
}
public void play(string _file)
{
looping = false;
base.Open(new Uri(_file, UriKind.Relative));
base.Play();
}
public void stop()
{
looping = false;
base.Stop();
}
private void mediaEnded(object sender, EventArgs e)
{
if(looping)
{
base.Position = new TimeSpan(0, 0, 0);
base.Play();
}
}
}
希望这能回答您的问题。
我不知道原因,但是这对我来说[[无效]],并且带有GIF:me.Position = TimeSpan.FromSeconds(0);
me.Play();
我的GIF在第一次迭代后停止播放。
解决方案是:
<MediaElement
x:Name="me"
MediaEnded="MediaElement_MediaEnded"
LoadedBehavior="Play" />
代码:
private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
me.Position = TimeSpan.FromMilliseconds(1);
}
使用1毫秒,而0毫秒可能会停止播放,您无法使用'播放'方法再次运行它。