我有这个声音列表:
List<SourceVoice> runningInstances;
我将一个事件附加到一个声音对象,以便在它停止时将其从列表中删除。
sourceVoice.StreamEnd += delegate
{
lock (runningInstances)
{
runningInstances.Remove(sourceVoice);
}
};
我也有这个停止函数,它可以从任何线程调用。
public void stop(int fadeoutTime)
{
lock (runningInstances)
{
foreach (var sourceVoice in runningInstances)
{
if (!sourceVoice.IsDisposed)
{
sourceVoice.Stop();
sourceVoice.FlushSourceBuffers();
sourceVoice.DestroyVoice();
sourceVoice.Dispose();
}
}
runningInstances.Clear();
}
}
我认为由于我将事件设为委托,它会一直等到对象被解锁。但是它似乎在那里冻结了。