Как вызывать переменные типа SoundPlayer в разных методах

#c# #reference #static #public

#c# #ссылка #статический #общедоступный

Вопрос:

Итак, я создаю своего рода музыкальный проигрыватель, в котором на данный момент есть 8 различных музыкальных жанров на выбор, и у меня возникают проблемы с использованием функций .play() и .stop() в этой системе.Медиафайлы.SoundPlayer предоставляет внешний метод, в котором создаются переменные SoundPlayer.

Я пытался сделать переменные общедоступными, но это, похоже, невозможно. У меня есть переменные SoundPlayer, объявленные следующим образом:

 Stream rockmusic = Properties.Resources.rock1;
SoundPlayer playrock = new SoundPlayer(rockmusic);
 

Я хотел сделать так, чтобы я мог использовать playrock.Play(); и playrock.Stop(); внутри другого метода, например

 private void ButtonWTVClick(object sender, EventArgs e){

playrock.Play();

}
 

Но public static не работает ни для System.IO.Stream, ни для System.Медиафайлы.SoundPlayer итак, я немного зациклился на том, как реализовать эти функции в разных методах, поскольку я довольно новичок в программировании и не знаю всех возможностей.

Комментарии:

1. Чтобы сделать член общедоступным, вам нужно объявить его общедоступным, например, в public SoundPlayer playrock ... , если это то, что вы хотите знать.

2. я не могу использовать public в SoundPlayer, иначе он скажет, что потоки, которые я объявил ранее, не существуют в текущем контексте, например: cs public Stream rockmusic = Properties.Resources.rock1; SoundPlayer playrock = new SoundPlayer(rockmusic); //"the name 'rockmusic' doesn't exist in the current context"

3. Вы можете инициализировать playrock непосредственно с new SoundPlayer(Properties.Resources.rock1) помощью и предоставлять playrock.Stream через свойство rockmusic (если вам это действительно нужно как члену). Или переместите инициализацию в конструктор. Может быть, поделитесь с нами большим контекстом, чтобы было понятнее, что вам здесь нужно.

4. Спасибо, что сработало, и это было довольно просто реализовать, большое спасибо.

Ответ №1:

Используйте последнее предложение sticky bit и объявите его на уровне класса / формы, например:

 public partial class Form1 : Form
{

    private SoundPlayer playrock = new SoundPlayer(Properties.Resources.rock1);

    public Form1()
    {
        InitializeComponent();
    }

    private void ButtonWTVClick(object sender, EventArgs e)
    {
        playrock.Play();
    }

}