1

我有一小段 C# 代码

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

我不知道为什么,但从未调用过 MediaEndedLoop 和 MediaEndedDestroy

任何想法?

4

2 回答 2

1

我也有这个问题。我找不到解决方案,但如果您的媒体存在于循环应用程序或线程中,我确实想出了一个解决方法。您可以在某个点之后手动重置位置。

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

这是我目前能提供的最好的。

于 2016-09-18T16:19:41.647 回答
0

MediaPlayer需要 aDispatcher才能调度, MediaEnded...MediaOpened事件。

当您使用 WinForm 应用程序时,Dispatcher应该已经注册了。这意味着您不必做任何事情来使事件正常工作。

如果您想在控制台应用程序中接收事件,您必须Dispatcher自己运行。

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();
}
于 2018-08-14T09:37:24.257 回答