问题
im 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 create new source again? why cant i just call 'play'?
i dont want to do it in XAML as for some reason.
have a look at my code snippet:
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();
}
or is there a proper way to loop NOT in XAML but in here .cs file?
回答1:
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();
}
回答2:
You don't even need to set LoadedBehavior as Manual just leave it as Play.
And on MediaEnded event you should set new position of video that will be not equals to zero:
private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
media.Position = TimeSpan.FromMilliseconds(1);
}
回答3:
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...
回答4:
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.
回答5:
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
来源:https://stackoverflow.com/questions/5975388/c-sharp-wpf-how-to-repeat-mediaelement-playback-from-mediaended-event-handler-wi