C# MediaPlayer.MediaEnded event not firing

后端 未结 2 1094
天命终不由人
天命终不由人 2021-01-28 20:25

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


        
相关标签:
2条回答
  • 2021-01-28 20:49

    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();
    }
    
    0 讨论(0)
  • 2021-01-28 20:54

    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.

    0 讨论(0)
提交回复
热议问题