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