Re[5]: Можно так использовать DataTable из разных потоков?
От: Skynin Украина skynin.blogspot.com
Дата: 28.08.08 12:47
Оценка: 1 (1)
А>Я-то думал, что имею проблемы с использованием DataTable из разных потоков, а оказывается юзаю (косвенно как бы) контрол из разных потоков.
Именно. Не исследовал, но наверняка при присвоении .DataSource = dTable грид цепляется на события DataTable. Тот их конечно генерит, при изменении. Но в потоке изменений. И в этом же потоке грид получает событие и обрабатывает.

А>Теперь уже подумаю как перестроить код с учётом этого нюанса

А>В потоке грида я и так создаю свой DataTable и устанавливаю .DataSource = dTable, а заполняю dTable в фоновом потоке.
Так это и есть — неправильно! Если с гридом связан DataTable, то его нельзя изменять в другом потоке! Выше Вы вроде как поняли, а теперь опять: заполняю dTable в фоновом потоке

Вариант о котором я говорил — другой.

Поток А
...в нем живет грид
Поток B
... dTable = new DataTable
.. и т.д.
Invoke // переключаемся в Поток А
.DataSource = dTable

А если:
Поток А
...в нем живет грид
dTable = new DataTable
.DataSource = dTable
Поток B, запускаем после присвоения .DataSource = dTable
изменяем dTable, при этом грид обратывает события DataTable.

то и будет — горе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.