Я решил это следующим образом:
Поскольку мой 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()
Я не знаю, является ли это лучшим решением, но, по крайней мере, оно решило большинство моих проблем.