2011-05-12 48 views
7

im reproducción de un vídeo en WPF.i quiere que bucle así que lo que hice es cuando se activa el evento mediaended, reproduzco mi video. así que esto me dará un bucle. problema es por qué tengo que crear una nueva fuente de nuevo? ¿Por qué no puedo simplemente llamar 'jugar'?C# WPF ¿cómo se repite la reproducción de MediaElement del controlador de eventos mediado sin declarar una nueva fuente?

no quiero hacerlo en XAML como por alguna razón.

echar un vistazo a mi fragmento de código:

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

o hay una forma correcta de bucle no en XAML, pero aquí en Cs archivo?

Respuesta

12

En lugar de restablecer la fuente al comienzo de su controlador Media_Ended, intente establecer el valor de posición de vuelta a la posición inicial. La propiedad de posición es un intervalo de tiempo por lo que es probable que desee algo así como ...

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

thnx por su respuesta. Lo intenté antes, pero no success.video no se reproduce. – Psychocryo

+0

Hmmm ... eso es extraño. Lo probé, pero con un archivo de audio, no un video. No estoy seguro de por qué el video sería diferente. Volveré a mirar. – IanR

+1

¡Por alguna razón, esta combinación no funciona a veces! En mi caso para gif. – Evgeny

0

Usted no tiene que establecer el origen de again.Just establece la posición de la MediaElement del inicio del evento media_ended

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

Es posible que necesite configurar MediaElement.LoadedBehavior en Manual

EDITAR

he intentado cargar un archivo ASF con la etiqueta REPEAT y su funcionamiento muy bien

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

pero creo que el mecanismo de manejo de MediaElement lista de reproducción incorporado tiene algunas flaws.I recomiendan seguir la solución se menciona en el siguiente enlace

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

Enviar un comentario aquí si tiene algún problema

+0

Parece que funciona si el contenido multimedia es un archivo único pero no funciona si utilizo un archivo de lista de reproducción como .wpl o .asx formato de archivo. cualquier pista? – Psychocryo

+0

Entonces, después de que termine toda la lista de reproducción ... desea repetir desde el primer archivo ¿verdad? – biju

+0

¿Cómo maneja su lista de reproducción? AFIK The MediaElement no tiene un mecanismo de manejo de listas de reproducción integrado. – biju

1

creo que se debe utilizar este código:

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

espero que esto ayudará.

+0

Por favor, no proporcione respuestas de "solo código". ¿Por qué crees que esta es la respuesta? –

+0

Esto funcionó para mí, no se puede llamar a "Reproducir" si LoadBehaviour ya se ha configurado para Reproducir en XAML. –

5

puedo hacer que funcione el establecimiento de la UnloadedBehavior = "Manual" y el código follwing

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

Ajuste de la posición de trabajo aún no ha Cero ...

+0

¡esto funcionó para mí! establecer a cero no funcionó. seguí las instrucciones aquí y funcionó para mí. mi caso era un gif animado – faldeland

6

Ni siquiera necesita establecer como LoadedBehavior Manual a dejarlo así como Juega.

Y en caso MediaEnded debe establecer nueva posición de vídeo que será no es igual a cero:

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
{ 
    media.Position = TimeSpan.FromMilliseconds(1); 
} 
Cuestiones relacionadas