Naudio Reader <wavestream>列表崩溃问题[种族状况]

时间:2018-10-10 16:18:56

标签: c# multithreading naudio naudio-framework

我有一个Webstream reader<WaveStream> list,我正在使用foreach循环处理WaveStream,如下所述

foreach (WaveStream ws in readers)
    ws.Dispose();

但是reader<WaveStream> list在foreach循环处理对象的同时被另一种方法修改 因此,我们得到了未处理的异常集合被另一种方法修改,并且我们的应用程序崩溃了

能否请您提供一些解释或解释链接,如下所述,在使用for循环后我们的崩溃问题如何解决?

for (int i = 0; i <= readers.ToArray().Length - 1; i++)
{
   readers[i].Dispose();
}

我无法理解for循环并readers.ToArray()解决了崩溃问题。

1 个答案:

答案 0 :(得分:0)

如果List<T>foreach中被修改时,您将得到一个异常,因为基础集合已更改。因此,在您的情况下,要么是另一个线程在您遍历列表时更改了列表,要么是处理流的实际操作是在修改列表。通过调用ToArray,您将创建一个新数组,该数组是原始列表的副本。没有其他人可以访问该数组,因此当您遍历该数组时,其内容不会更改。