Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема с потоком в C#

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблема с потоком в C#
Имя
Сообщение << Старые топики   Новые топики >>
Проблема с потоком в C# - 2008-06-17 14:04:55.270000   
ZneP

Сообщений: 910
Оценки: 0
Присоединился: 2006-08-21 16:11:47
Всем привет


Пишу программу, хочу использовать поток для заполнения DataGrid из БД.

Когда стартует поток (запускаю его сразу в функции обработки события Load(), все компоненты проинициализированы) то выдается след. ошибка:
Cross-thread operation not valid: Control 'data_grid' accessed from a thread other than the thread it was created on.
Ругается на строчку data_grid.DataSource = ds.Tables[0]; из функции, которая обрабатывается во время работы потока.

А вот и сама функция:
private void Fill_DataGrid() { string query = "SELECT ......"; p.ExecuteSql(query, ref ds); if (ds != null && ds.Tables[0].Rows.Count &gt; 0) { data_grid.DataSource = ds.Tables[0]; } } Без потока все работает нормально.

ХЗ что делать.
Post #: 1
RE: Проблема с потоком в C# - 2008-06-17 16:26:35.936666   
ahap

Сообщений: 5
Оценки: 0
Присоединился: 2006-09-21 09:50:04.816666
Все методы и свойства, кроме Invoke(), InvokeRequired, BeginInvoke(), EndInvoke(), CreateGraphics(), контролов не потоко-безопасны, вызывать методы контрола из потока который не создан в этом потоке нужно при поможи методов Invoke, передавая им делегат и его параметры.
Вот пример синхронной работы с контролом:
delegate void SetDataSourceDelegate(DataTable dataTable); void SetDataGridSource(DataTable dataTable) { &nbsp;if (dataGrid1.InvokeRequired) &nbsp;{ &nbsp; SetDataSourceDelegate dataSourceDelegate = new SetDataSourceDelegate(SetDataSourceCallback); &nbsp; dataGrid1.Invoke(dataSourceDelegate, new Object[]{dataTable}); &nbsp;} &nbsp;else &nbsp; dataGrid1.DataSource = dataTable; }
Для асинхронного вызова необходимо исспользовать BeginInvoke(), EndInvoke()
Post #: 2
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблема с потоком в C#







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.