Привязка DGV к данным, созданным в другом потоке.Поток пользовательского интерфейса забирает контроль над потоком данных - PullRequest
0 голосов
/ 27 января 2019

Проблема:

Я пытаюсь, чтобы DataGridView показывал данные из DataTable, созданные и управляемые другим потоком.Этот поток вызывает событие, чтобы уведомить поток пользовательского интерфейса об обновлении DGV.

Когда я пытаюсь обновить его с помощью потока пользовательского интерфейса, поток пользовательского интерфейса становится владельцем DataTable, а затем, когда другой поток пытается добавитьВ другой записи я получаю ошибку операций с несколькими потоками.

Я читал о делегатах и ​​о том, как это сделать, но проблема в том, что, поскольку я хочу связать объект из одного потока в другой, неважнокакой поток обращается к подпункту UpdateTable, он работает с 1 объектом, которому он не принадлежит.

...

То, что я пробовал:

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

попытался создать копии данных с помощью потока пользовательского интерфейса, а затем привязать к нему DGV, но любой доступ к данным из потока пользовательского интерфейса блокирует другой поток.

Любая помощьна это будет высоко ценится.Я целый день гуглю и рылся в форумах, и мне не повезло.

1 Ответ

0 голосов
/ 27 января 2019

Решено, я пошел копировать данные маршрута.Когда я первоначально пытался, я делал

NewDataTable = OldDataTable

, где NewDataTable контролируется потоком пользовательского интерфейса и привязывается к DataGridView, а OldDataTable управляется другим потоком.Это не было на самом деле создание копии, это указывало на старую таблицу.

Так что я сделал

NewDataTable = OldDataTable.copy()

Это решило это.Это не идеально, потому что если таблица начинает увеличиваться в размерах, она может высосать время и память, но для моего приложения это сработает.Хотел бы я придумать более элегантный способ сделать это, но так и будет.

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