C# 在本地级别停止SoundPlayer循环

C# 在本地级别停止SoundPlayer循环,c#,soundplayer,C#,Soundplayer,我正在设置一个警报,弹出一个对话框,用户可以选择多个声音文件选项。我遇到的问题是在本地创建一个声音播放器,我可以用一个按钮关闭它。我遇到的问题是,当我关闭表单时,声音会不断循环,因为SoundPlayer不存在于button click事件中 以下是我所拥有的: void callsound() { if (SoundToggle == 0) // if sound enabled { if ((SoundFile == 0)

我正在设置一个警报,弹出一个对话框,用户可以选择多个声音文件选项。我遇到的问题是在本地创建一个声音播放器,我可以用一个按钮关闭它。我遇到的问题是,当我关闭表单时,声音会不断循环,因为SoundPlayer不存在于button click事件中

以下是我所拥有的:

 void callsound()
    {
        if (SoundToggle == 0) // if sound enabled
        {

            if ((SoundFile == 0) && (File.Exists(@"attention.wav")))
            {
                System.Media.SoundPlayer alarm = new System.Media.SoundPlayer(@"attention.wav");
                alarm.PlayLooping();
            }
       if ((SoundFile == 1) && (File.Exists(@"aahh.wav")))
            {
                System.Media.SoundPlayer alarm = new System.Media.SoundPlayer(@"aahh.wav");
                alarm.PlayLooping();
            }
     }

private void button1_Click(object sender, EventArgs e)
    {
        //alarm.Stop();  Only works if SoundPlayer declared at class level
        this.Close();
    }

有没有一种方法可以通过声明我所在的SoundPlayer实例来完成我想做的事情?或者有没有办法在类级别声明它,并且仍然能够根据用户设置更改声音文件?

为什么这是一个问题?SoundPlayer不支持同时播放多个声音。将其移动到类范围,重写OnFormClosing事件,问题已解决

public partial class Form1 : Form {
  private System.Media.SoundPlayer alarm;

  protected override void OnFormClosing(CancelEventArgs e) {
    if (alarm != null) alarm.Stop();
  }
}
您可以尝试:

SoundMixer.stopAll();


SoundMixer类控制全局声音,因此它应该停止同一安全沙盒中的所有内容。

使用Powershell,我正在播放.wav文件,并使用以下命令启动了一个重复循环:

$Playwav = new-object ('Media.SoundPlayer') $playpath1 
$Playwav.PlayLooping()
我在Powershell IDE的运行部分停止了循环(F8):

FWIW,我的例子中的.wav是FPS-Doug,所以失控循环让我发笑


希望这有帮助

这是一个问题,因为这是我第一次使用SoundPlayer,我仍在努力解决它。它告诉我“OnFormClosing”“需要返回类型。我怎样才能把它处理好呢?我不知道它想要什么。谢谢你的澄清。现在我要看看我是否能想出如何把所有的东西拼凑起来。我对C#还是很陌生,所以这对我来说是全新的。
$Playwav = new-object ('Media.SoundPlayer') $playpath1 
$Playwav.PlayLooping()
$Playwav = new-object ('Media.SoundPlayer') $playpath1 
$Playwav.PlayLooping()
$Playwav.stop()