C#SoundPlayer-应该是静态的还是基于实例的?

时间:2018-11-01 19:57:50

标签: c# wpf static instance-variables soundplayer

我正在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保持为静态,还是应该更改为基于实例的? 谢谢!

2 个答案:

答案 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文件。