我有一个在我自己的WaveProvider类中移动光标的MoveTo方法。我在这个类中实现了一个相位声码器,所以当我移动光标时,我需要用新值重新创建一些对象。WaveOut没有问题,但是当我使用DirectSound时,它抛出了ArgumentNullException。
问题是,当程序在MoveTo方法中,并且正在更改对象中的一些值时,DirectSound在Read方法中,它会造成崩溃。我试图在改变位置时锁定WaveProvider,但DirectSound仍然可以进入Read方法。
如何修复它?
发布于 2012-09-17 23:18:55
你锁定的是什么?您需要在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
}
}
}https://stackoverflow.com/questions/12454715
复制相似问题