C # SoundPlayer - должен быть статическим или на основе экземпляра - PullRequest
0 голосов
/ 01 ноября 2018

Я использую класс SoundPlayer в C # (WPF), чтобы воспроизводить один и тот же звук .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 как статический или мне следует перейти на экземпляр? Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Может ли кто-нибудь дать некоторые рекомендации относительно того, должен ли я сохранять этот объект SoundPlayer как статический или мне следует перейти на экземпляр?

Это зависит от того, где и как SoundPlayer предназначен для использования в вашем приложении. Если вы будете / всегда можете использовать один и тот же экземпляр SoundPlayer, не изменяя его каким-либо образом, вы можете определить его как статическое и доступное только для чтения поле в вашем классе:

private static readonly SoundPlayer soundPlayer = new SoundPlayer(@"c:\media\click.wav");

Тогда будет создан только один экземпляр независимо от количества экземпляров времени выполнения вашего класса. Метод Play() будет воспроизводить файл .wav с использованием нового потока.

0 голосов
/ 02 ноября 2018

Я думаю, что это мало что меняет, потому что в любом случае его нужно создать только один раз - поскольку вы играете один и тот же файл.

Объявите член класса типа SoundPlayer и создайте его экземпляр с помощью инициализатора.

static SoundPlayer soundPlayer = new SoundPlayer(@"c:\media\click.wav");

или

SoundPlayer soundPlayer = new SoundPlayer(@"c:\media\click.wav");

и всякий раз, когда вам нужно воспроизвести звук, вам не нужно выполнять нулевую проверку против него, просто позвоните

soundPlayer.Play(); 

Для утилизации ресурса вызовите метод Dispose в экземпляре, если вы его больше не используете, например, когда окно закрыто.

soundPlayer.Dispose();
...