NAudio和DirectSound问题调用Read方法

时间:2012-09-17 07:20:57

标签: c# naudio

我有一个MoveTo方法,可以在我自己的WaveProvider类中移动光标。我在这个类中实现了一个Phase Vocoder,所以当我移动一个游标时,我需要用新值重新创建一些对象。 WaveOut没有问题,但当我使用DirectSound时,它会抛出ArgumentNullException
问题是,当程序在MoveTo方法中,并且正在更改对象内部的某些值时,DirectSound在Read方法内部并且会导致崩溃。我在更改位置时尝试锁定WaveProvider,但DirectSound仍然可以使用Read方法 如何解决?

1 个答案:

答案 0 :(得分:1)

你在锁定什么?您需要在WaveProvider中创建一个锁定对象,并在MoveTo和Read方法中锁定它:

class MyWaveProvider : IWaveProvider
{
    private object lockObject = new Object();

    public void MoveTo(int pos)
    {
        lock(lockObject)
        {
            // perform the move
        }
    }


    public int Read(byte[] buffer, int offset, int count)
    {
        lock(lockObject)
        {
            // perform the read
        }
    }
}