C# MediaPlayer.MediaEnded event not firing

c# events system.windows.media

842 просмотра

2 ответа

1 Репутация автора

i have this little piece of C# code

//Creates a MediaPlayer with the sound you want to play
    public static void PlaySound (Stream wavStream, string wavName, bool loop)
    {
        //Get the path for the file to play
        var path = GetFilePath(wavStream, wavName);

        var player = new MediaPlayer();
        player.Open(new Uri(path));
        player.MediaEnded += loop ? new EventHandler(MediaEndedLoop) : new EventHandler(MediaEndedDestroy);
        player.Play();

        players.Add(player);
        names.Add(wavName);
    }

I dont know why but MediaEndedLoop and MediaEndedDestroy are never called

Any idea?

Автор: Jose134 Источник Размещён: 18.07.2016 12:30

Ответы (2)


0 плюса

179 Репутация автора

I also had this problem. I couldn't find a solution, but I did come up with a workaround if your media exists in a looping application or thread. You can just manually reset the position after a certain point.

if (media.Position > new TimeSpan(0, 2, 25))
      {
          media.Position = new TimeSpan(0, 0, 00);
      }

That's the best I can offer as of now.

Автор: Rudy Scoggins Размещён: 18.09.2016 04:19

0 плюса

2412 Репутация автора

The MediaPlayer requires a Dispatcher in order to dispatch the MediaEnded, MediaOpened ... events.

When you are using a WinForm application a Dispatcher should already have been registered. That means that you should not have to do anything to get the events working.

If you want to receive events in a console application you'll have to run the Dispatcher yourself.

public static void Main (string[] args)
{
  var mediaPlayer = new MediaPlayer();
  mediaPlayer.MediaEnded += (sender, eventArgs) => Console.WriteLine ($"ended.");
  mediaPlayer.MediaOpened += (sender, eventArgs) => Console.WriteLine ($"started.");
  mediaPlayer.MediaFailed += (sender, eventArgs) => Console.WriteLine ($"failed: {eventArgs.ErrorException.Message}");
  mediaPlayer.Changed += (sender, eventArgs) => Console.WriteLine ("changed");

  mediaPlayer.Open (new Uri (@"S:\custom.mp3"));
  mediaPlayer.Play();

  Dispatcher.Run();
}
Автор: a-ctor Размещён: 14.08.2018 09:37
Вопросы из категории :
32x32