2013-11-15 126 views
1

我有一个视频文件在媒体元素中播放。我需要保持它玩,所以我想:在WPF媒体元素中连续播放视频

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(); 
} 

但是上面并没有重播视频文件。为什么?我做错了什么?

回答

7

根据post on MSDN

播放()从当前位置开始,因此,你必须先去出发的地方,然后再播放。

所以,你必须重赛之前复位位置:

me.Position = TimeSpan.FromSeconds(0); 
me.Play(); 
+0

谢谢解决了我的prblm。 –

+0

为我工作,但只有在我将LoadedBehavior更改为手动 – thewindev

+0

@thewindev后[docs](https://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.loadedbehavior.aspx)表明您需要将它设置为'Manual'来调用'Play()',但这似乎不是OP遇到麻烦的部分。也许可以帮助别人。很高兴它帮助你。 –

0

我不知道哪个原因,但对我来说这从来没有工作过:

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); 
} 

看起来,如果你将设置为零什么问题可能发生的位置。 “播放”方法可能会停止工作。

0

我得到了它的这项工作:

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(); 
     } 
    } 

} 

希望这回答了你的问题。