自分のクラスMoveTo
でカーソルを移動するメソッドがあります。WaveProvider
このクラスに Phase Vocoder を実装したので、カーソルを移動するときは、新しい値でいくつかのオブジェクトを再作成する必要があります。は問題ありませんWaveOut
が、使用するDirectSound
と がスローされArgumentNullException
ます。
問題は、プログラムがMoveTo
メソッド内にあり、オブジェクト内のいくつかの値を変更しているときに、DirectSound
Read メソッド内にあり、クラッシュすることです。WaveProvider
位置変更中にロックしようとしましたが、DirectSound
まだ Read メソッドに入ることができます。
修正方法は?
質問する
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 に答える