2

我正在NAudio使用

WaveOutEvent Klangwiedergabegeraet;

private void Play(string Dateiname)
{
    Klangwiedergabegeraet = new WaveOutEvent();
    Klangwiedergabegeraet.DeviceNumber = comboBox1.SelectedIndex;
    ISampleProvider StueckchenHalter = null;
    StueckchenHalter = CreateInputStreamS(Dateiname);
    Klangwiedergabegeraet.Init(new SampleToWaveProvider(StueckchenHalter));  
    Klangwiedergabegeraet.Play();
}

private void Cancel()
{
    if (Klangwiedergabegeraet != null)
    {
        Klangwiedergabegeraet.Stop();
        Klangwiedergabegeraet.Dispose();
    }
}

运行时Cancel(),它不会停止。当我使用

WaveOut Klangwiedergabegeraet;

private void Play(string Dateiname)
{
    Klangwiedergabegeraet = new WaveOut();
    ...
}

private void Cancel()
{
    if (Klangwiedergabegeraet != null)
    {
        Klangwiedergabegeraet.Stop();
        Klangwiedergabegeraet.Dispose();
    }
}

有效。为什么会这样以及要改变什么?

PS我使用WaveOutEvent而不是WaveOut因为WaveOut没有属性DeviceNumber

4

1 回答 1

5

如果您在非 GUI 线程上运行,那么WaveOutEvent推荐的方法是这样做,而不是WaveOut因为它会选择在某些声卡上可能不可靠的函数回调。此外,WaveOut确实DeviceNumber有财产。

于 2012-11-03T15:40:41.103 回答