我正在使用SoundPlayer
该类在我的 WPF 应用程序中播放 WAV 文件。这些文件很短,是应用程序的一部分,并根据程序中发生的事件进行播放。用户无法控制播放什么声音,也无法自行决定播放声音。我也尝试过使用 WPFMediaPlayer
控件,但我遇到了该控件的问题。效果很好,SoundPlayer
但是有问题。
本质上,我需要保留一系列声音,并在它们排队时一个接一个地播放声音。在某些情况下,我必须停止播放任何声音并播放另一种声音。SoundPlayer
所以我有两个要求与控件互斥:
- 我的代码需要知道声音何时播放完毕。
- 声音必须在后台播放
为了实现这一点,我创建了一个名为SoundController
. 这有一个后台线程,它使用Thread
's Dispatcher
对我用来播放声音的方法的调用进行排队,使用BeginInvoke
. 该方法在SoundController
调用播放声音之前在事件中引发一个事件SoundPlayer.PlaySync
,然后在PlaySync
返回后引发另一个事件。
在我的 UI 线程中,在我需要停止声音的地方,我调用了SoundController
类的Stop
方法。这会调用SoundPlayer
'Stop
方法来停止播放声音。这就是问题发生的地方。事实证明,SoundPlayer.Stop
它不会停止声音,而是等待声音结束后再返回。
这会阻止我的 GUI 死机。虽然我可以异步调用它,但我的 GUI 不会停止,但声音也不会停止。
正如我所说,WPF MediaPlayer 对我们不起作用,而且无论如何它是矫枉过正的。是否有其他播放声音的替代方法可以让我能够引发事件、在后台线程中播放声音并停止播放?
2012 年 6 月 26 日编辑:
这个问题已经存在一个多月了,我还没有收到任何回复。所以我想没有其他替代SoundPlayer
控制。
我将从不同的角度发布一个新问题。