В моем реальном приложении мне нужно итерации коллекции, но ее можно изменить из другой темы. Поэтому мне нужно скопировать коллекцию, чтобы перебирать ее. Я воспроизвел эту проблему на небольшом примере, но, по-видимому, мое отсутствие понимания замков и потоков приводит к System.ArgumentException
. Пробовал разные вещи с помощью блокировки, но результат тот же.System.ArgumentException при блокировке
class Program
{
static List<int> list;
static void Main(string[] args)
{
list = new List<int>();
for (int i = 0; i < 1000000; i++)
{
list.Add(i);
if (i == 1000)
{
Thread t = new Thread(new ThreadStart(WorkThreadFunction));
t.Start();
}
}
}
static void WorkThreadFunction()
{
lock (list)
{
List<int> tmp = list.ToList(); //Exception here!
Console.WriteLine(list.Count);
}
}
}
Каково сообщение об этом исключении? –