Re[2]: Можно так использовать DataTable из разных потоков?
От: Аноним  
Дата: 26.08.08 07:38
Оценка:
Здравствуйте, Skynin, Вы писали:

S>Изменения всех объектов связанных с интерфейсными правильней всего делать в потоке интерфейсного объекта (хотя исключения наверное есть)


Да, конечно. Но по идее я не делаю интефейсные изменения (явно), я меняю состояние источника данных и по идее грид должен сам обновляться, что он в принципе и делает. Это не правильный подход?

S>Делал я также, через lock, и было все нормально, пока не написал тестовый генератор таблиц, и столкнулся с иногда выскакивающим эксэпшеном из глубин грида, если в DataTable менялось количество строк


Точь в точь как у меня

S>А когда сделал (у меня грид был один, а DataTable'ов много):


S>
S>// если в другом от грида потоке изменяется таблица которая сейчас отображется, то изменяем ее в потоке грида
S>if (lastGrid.InvokeRequired && lastGrid.DataSource == dTable) lastGrid.Invoke(delegate () {UpdtForms(...})
S>// а иначе - просто меняем.
S>else UpdtForms(...
S>


S>все стало работать стабильно.

S>Понятно, что раз в потоке грида приходится менять то там нужно минимум работы делать, иначе теряется смысл второго потока.

Мне к сожалению это не подходит. У меня строки в DataTable добавляются весьма активно и постоянное обновления DataSource у грида привидёт к его постоянной перерисовке.

Есть ещё идеи?

Спасибо за ответ, кстати , а то помощи как-то не много...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.