C# WPF 调用 Windows Media Player

滑轮

我目前正在通过创建钢琴应用程序来打发时间。每个 Key 都由一个简单的按钮表示,其中包含一个在点击时触发的命令。这导致在 ViewModel 中执行此方法:

    private void PlaySound(object parameter)
    {
        var mediaPlayer = new MediaPlayer();
        mediaPlayer.Open(new System.Uri(@SoundBar.GetSoundPathByIdent(int.Parse(parameter.ToString()))));
        mediaPlayer.Play();
    {

我认为问题在于MediaPlayer没有留下一个 WeakReference 来阻止 GarbageCollector 收集它。玩一段时间后导致内存超载。

我找到的解决方案是调用:mediaPlayer.Close(); 但这只能在声音播放完毕后发生,否则会被切断。

有没有办法检查播放的声音是否播放完毕?

我已经花了一些时间进行研究和测试,但我无法想出一个可行的解决方案。

迈克·迪内斯库

位置NaturalDuration性能给你你在(即流在细节Position / NaturalDuration让你在0.0和1.0之间的值表示播放位置百分比)

但是您可能想要为您的媒体播放构建一个“编排器”。假设您不想同时播放所有声音,协调器可能负责管理媒体播放器的生命周期,并确定它们在播放中的位置。

在您的应用程序中,您可以在启动时创建协调器的单个实例。编排器可以创建和管理一个媒体播放器池,它可以在需要播放和弦时重复使用。然后你的钢琴应用程序可以同时支持一定数量的和弦,并有一个轮询器来确定哪些媒体播放器是空闲的,哪些是“忙”播放音频的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章