C#MediaPlayer.MediaEnded事件未启动
本文关键字:启动 事件 MediaEnded C#MediaPlayer | 更新日期: 2023-09-27 17:57:32
我有一小段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从未被称为
知道吗?
我也遇到了这个问题。我找不到解决方案,但如果您的媒体存在于循环应用程序或线程中,我确实想出了一个解决方案。您可以在某一点之后手动重置位置。
if (media.Position > new TimeSpan(0, 2, 25))
{
media.Position = new TimeSpan(0, 0, 00);
}
这是我目前能提供的最好的了。
MediaPlayer
需要一个Dispatcher
才能调度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();
}