Я использовал BackgroundWorkers совсем немного, но я никогда не испытывал этой проблемы раньше. Моя программа анализирует вывод логического анализатора, производящего пакеты, из которых тысячи. Чтобы предотвратить слишком много задержки, обновляя ListView в моей форме (я ранее сообщал об этом каждый, как было обнаружено, и форма была полностью неактуальной). Я собираю пакеты внутри BackgroundWorker в общем списке (список < Пакет >) и затем сообщают, что либо когда n количество найдено (в настоящее время 250), либо когда происходит исключение, либо когда оно завершено.C#: Как я могу решить, что «Коллекция была изменена» в обратном вызове отчета о ходе работы BackgroundWorker?
Проблема возникает в моем обратном вызове, когда я выполняю перебор по списку < Пакет > Я получаю InvalidOperationException с ошибкой «Коллекция была изменена». Я не трогаю коллекцию внутри foreach (я добавляю в другую коллекцию, но я не вижу причин, по которым это может изменить коллекцию, которую я перебираю, плюс комментирование ее не устраняет проблему.) Я даже попытался заблокировать e.UserState, сохранив e.UserState в локальной области. Список < Пакет > и блокировка, что ничего не работает.
Вот код для моего метода обратного вызова:
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
packetsListView.SuspendLayout();
lock ((List<Packet>)e.UserState)
{
foreach (Packet packet in (List<Packet>)e.UserState)
{
packets.Add(packet);
ListViewItem item = new ListViewItem(string.Format("{0}ns", Math.Round(packet.StartSampleNumber * 41.666667)));
item.Tag = packet;
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, packet.Description));
packetsListView.Items.Add(item);
}
}
packetsListView.ResumeLayout();
statusLabel.Text = string.Format("Analyzing...found {0} {1}", packetsListView.Items.Count, packetsListView.Items.Count == 1 ? "packet" : "packets");
}
Что вы комментируете? >> Я не трогаю коллекцию внутри foreach (я добавляю в другую коллекцию, но я не вижу причин, по которым это может изменить коллекцию, которую я повторяю, плюс комментирование ее не устраняет проблему.) < < – Les
Является ли (List
Les