0

我有一个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()解决崩溃问题。

4

1 回答 1

0

如果List<T>在您foreach通过它时修改了 a,您将收到异常,因为基础集合已更改。因此,在您的情况下,当您迭代列表时,另一个线程正在更改列表,或者 Disposing 流的操作正在修改列表。通过调用ToArray您创建一个新数组,它是原始列表的副本。没有其他人可以访问该数组,因此在您遍历它时它的内容不会改变。

于 2018-10-15T13:06:51.307 回答