停止线程中的声音c#

时间:2017-06-02 09:04:51

标签: c# multithreading visual-studio audio

关于此代码的一些问题,我有两个问题:

1)如何停止声音?声音在一个单独的线程中,我不知道如何阻止它们。

2)如果我继续按下键,这段代码将播放相同声音的很多次,这是不现实的(想象一下钢琴键盘:如果我按一个键,我继续按下它只有一个声音(冷杉)会玩)。如何解决这个问题呢?     我找到了一个解决方案,但现在有线程,我不知道该怎么做。

private void Form1_KeyDown(object sender, KeyPressEventArgs e)
{
    [...]   // Other code
    th = new Thread(press));
    th.Start(new object[] { key, name });
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    [...]   // Other code
    th = new Thread(leave);
    th.Start(new object[] { key, name });
}

private void press(object data)
{
    [...]   // Other code
    playSound(name);
}

private void leave(object data)
{
    [...]   // Other code
    stopSound(name);
}

private void playSound(string name)
{
    [...]   // Other code
    string url = Application.StartupPath + "\\notes\\" + name + ".wav";
    var sound = new System.Windows.Media.MediaPlayer();

    sound.Open(new Uri(url));
    sound.play();
}

private void stopSound(string name)
{
    ???
}

非常感谢你!

1 个答案:

答案 0 :(得分:0)

  1. 将线程创建为类中的变量,以便可以随时访问它。

  2. 使用Handled Property防止再次处理事件

    e.Handled = true;