c# WPF how to repeat MediaElement playback from mediaended event handler without declaring new source?

前端 未结 5 1026
Happy的楠姐
Happy的楠姐 2020-12-18 00:23

I\'m playing a video in WPF.i want it to loop so what I did is when the mediaended event fires, I play back my video. so this will get me a loop. prob is why do u I have to

相关标签:
5条回答
  • 2020-12-18 00:56

    I think you should use this code :

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

    I hope this will help.

    0 讨论(0)
  • 2020-12-18 01:00

    You don't have to set the source again.Just set the position of the mediaelement to the start on the media_ended event

     private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
            {
                ((MediaElement)(sender)).Stop();
                ((MediaElement)(sender)).Position = new TimeSpan(0, 0, 0);
                ((MediaElement)(sender)).Play();
            }
    

    You may need to set MediaElement.LoadedBehavior to Manual

    EDIT

    I have tried loading an asf file with the REPEAT tag and its working fine

    <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>
    

    But i think the inbuilt playlist handling mechanism of mediaelement has some flaws.I recommend following the workaround mentioned in the below link

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

    Post comment here if you have any problem

    0 讨论(0)
  • 2020-12-18 01:08

    I make it work setting the UnloadedBehavior="Manual" and the follwing code

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

    Setting the position to Zero didnt work...

    0 讨论(0)
  • 2020-12-18 01:15

    You don't even need to set LoadedBehavior as Manual just leave it Play.

    And reset your media position on MediaEnded.

    The new position of the video should be greater than zero:

    private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
    {
         media.Position = TimeSpan.FromMilliseconds(1);
    }
    
    0 讨论(0)
  • 2020-12-18 01:16

    Instead of resetting the Source at the start of your Media_Ended handler, try setting the Position value back to the start position. The Position property is a TimeSpan so you probably want something like...

    private void Media_Ended(object sender, EventArgs e)
    {
        media.Position = TimeSpan.Zero;
        media.Play();
    }
    
    0 讨论(0)
提交回复
热议问题