0

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

4

1 回答 1

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
        }
    }
}
于 2012-09-17T15:18:54.893 回答