我正在运行此代码暂停这首歌,但它无意中无法正常工作。 我无法从第二个按钮访问第一个按钮的变量,因此我无法暂停该歌曲。 你怎么认为我能做到这一点? 我正在使用naudio库,因为我想将音频文件作为资源。
private void button3_Click(object sender, EventArgs e)
{
MemoryStream mp3file = new MemoryStream(Properties.Resources.musica1);
Mp3FileReader mp3reader = new Mp3FileReader(mp3file);
var waveOut = new WaveOut();
waveOut.Init(mp3reader);
waveOut.Play();
if (pausa)
{
waveOut.Pause();
}
}
private void button2_Click(object sender, EventArgs e)
{
pausa = true;
}
答案 0 :(得分:1)
您需要重新构建代码。问题是,在button3_Click
方法中,您正在加载和播放MP3,但随后该功能会立即终止。 if
语句不会被连续检查,这是我认为你会想到的。因此,点击button2
只会更改pausa
的状态,但这并不会影响任何内容。
一种方法是在类级别声明所有变量(mp3file
,mp3reader
和waveOut
),然后将其余代码放在{{1}中比如说,你的表格button3_Click
事件处理程序。
Load
现在,您的// These variables are declared at the class level
MemoryStream mp3file;
Mp3FileReader mp3reader;
WaveOut waveOut;
...
private void Form1_Load(object sender, EventArgs e)
{
mp3file = new MemoryStream(Properties.Resources.musica1);
mp3reader = new Mp3FileReader(mp3file);
waveOut = new WaveOut();
waveOut.Init(mp3reader);
}
功能看起来像这样(假设buttonX_Click
是您的播放按钮而button3
是您的暂停按钮):
button2
由于private void button3_Click(object sender, EventArgs e)
{
waveOut.Play();
}
private void button2_Click(object sender, EventArgs e)
{
waveOut.Pause();
}
在类级别声明,因此两个按钮都可以访问它,因此可以随意播放和暂停。你不再需要waveOut
,除非你当然需要知道该计划其他地方的游戏状态。