DataTable.ToList() вызывает исключение, в котором коллекция была измененаC#

Место общения программистов C#
Ответить
Anonymous
 DataTable.ToList() вызывает исключение, в котором коллекция была изменена

Сообщение Anonymous »

Мое приложение изменяет определенную таблицу данных из нескольких потоков. Я уже реализовал эксклюзивный механизм блокировки для добавления строк и фиксации в БД (его обрабатывали два разных потока). Теперь поток пользовательского интерфейса (третий) использует эту таблицу для сужения данных с помощью LINQ, а затем привязки результата к элементу управления Chart. Я уже разбил его на самые маленькие команды, чтобы понять, где это происходит.

Код: Выделить всё

var s1 = dataTable.ToList(); //originally it was dataTable.ToEnumerable()
var s2 = s1.Select(LINQ_expr1);
var s3 = s2.Where(LINQ_expr2);
var s4 = s3.OrderBy(LINQ_expr3);
Во всех случаях это происходило при выполнении первой команды. Единственный 100% рабочий вариант, который я могу сейчас придумать, — это включить сюда мой запорный механизм. Я хотел бы избежать этого, так что, может быть, кто-нибудь знает решение здесь? Я предполагаю, что это должно быть что-то, что создает копию этой переменной и устойчиво к этому исключению.
Эта таблица может содержать несколько сотен тысяч строк (она регулярно усекается, но только после анализа), поэтому я прошу альтернативу моему решению по блокировке. Это заблокирует другие потоки, но, с другой стороны, будет стоить дешевле, чем DataTable.Copy().

Подробнее здесь: https://stackoverflow.com/questions/792 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»