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