Linq-запрос и модификация коллекции - PullRequest
0 голосов
/ 08 октября 2018

У меня есть запрос linq, подобный следующему:

dim m As iEnumerable(Of DataRow)= (From b In tbl Select b).ToList.AsEnumerable

Где 'tbl' - это DataTable, который имеет огромное количество строк и постоянно обновляется (добавление строк, удаление строк и изменениеполя).

У меня ошибка «Сборник был изменен», и не удалось запустить деталь (.ToList)

«TBL» всегда изменяется постоянно, и яне хочу останавливать обновления.

Как я могу получить экземпляр или, по крайней мере, Как получить доступ к запросу только для чтения?

Я хочу запрос в качестве состояния при выполнении запросаи мне это нужно без обновлений.

Любая идея

1 Ответ

0 голосов
/ 09 октября 2018

Я решил это следующим образом:

Поскольку мой DataTable является многопоточным DataTable, я написал весь код редактирования в BackgroundWorkers.Итак, все, что я сделал, это добавил один ManualResetEvent в свое приложение, и во всех процедурах всех этих BackgroundWorkers я добавил следующий код непосредственно перед кодом редактирования:

ManualResetEvent.WaitOne()
... Editing DataTable here.

И когда мне нужно получить копиюмоего DataTable я делаю следующее:

ManualResetEvent.Reset()
Thread.Sleep(300)

Затем я получил свободный доступ к dataTable и скопировал его в «m», как я хотел.

dim m As iEnumerable(Of DataRow)= (From b In tbl Select b).ToList.AsEnumerable

После этого я возобновил backgroundWorkerзвоните:

ManualResetEvent.Set()

Я не знаю, является ли это лучшим решением, но, по крайней мере, оно решило большинство моих проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...