2013-11-15 116 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(); 
     } 
    } 

} 

希望這回答了你的問題。