我正在C#(WPF)中使用SoundPlayer类,一遍又一遍地(按按键)播放相同的.5s音频。每次用户按下自定义的屏幕键盘按钮,都会播放声音。
static SoundPlayer soundPlayer = null;
try
{
soundPlayer = new SoundPlayer(@"c:\media\click.wav");
}
catch (Exception e)
{
Logger.LogException(e);
}
// later on (usage)
try
{
soundPlayer?.Play();
}
任何人都可以提供一些指导,说明我是否应该将此SoundPlayer obj保持为静态,还是应该更改为基于实例的? 谢谢!
答案 0 :(得分:1)
我认为这没什么区别,因为无论哪种方式,它都只需要实例化一次-因为您正在播放同一文件。
声明类型为SoundPlayer
的类成员,并使用初始化程序将其实例化。
static SoundPlayer soundPlayer = new SoundPlayer(@"c:\media\click.wav");
或
SoundPlayer soundPlayer = new SoundPlayer(@"c:\media\click.wav");
,只要您需要播放声音,就无需对其进行空检查,只需调用
soundPlayer.Play();
为处理资源,如果不再使用该实例,请在该实例上调用Dispose
方法,例如,在关闭窗口时。
soundPlayer.Dispose();
答案 1 :(得分:1)
任何人都可以提供一些指导,说明我是否应该将此SoundPlayer obj保持为静态,还是应该更改为基于实例的?
这取决于将SoundPlayer
用于应用程序的位置和方式。如果您将/可以始终使用SoundPlayer
的相同实例而不用任何方式对其进行修改,则可以将其定义为类中的静态和只读字段:
private static readonly SoundPlayer soundPlayer = new SoundPlayer(@"c:\media\click.wav");
然后,无论您的类的运行时实例有多少,都将只创建一个实例。 Play()
方法将使用新线程播放.wav文件。