2010-01-07 2 views
0

У меня есть SQL-запрос, который возвращает сотни строк, и мне нужно добавить их в WinForms DataGrid таким образом, который все равно позволит пользователю просматривать/прокручивать DataGrid по мере того, как строки добавлено.Обновление DataGrid в BackgroundWorker Thread

В настоящее время я использую поток BackgroundWorker для выполнения инструкции SQL и прокручиваю строки в DataReader, прежде чем использовать Control.BeginInvoke для передачи каждой новой строки обратно в поток пользовательского интерфейса, где он добавляется в привязанный DataTable к DataGrid. На самом деле это не имеет желаемого эффекта (требуется некоторое время для обновления DataGrid, а затем после его обновления пользовательский интерфейс становится невосприимчивым).

Есть ли способ делать то, что я хочу, и если да, то как?

Редактировать: Я добавил thread.sleep к рабочему потоку, когда он прокручивается через datareader, что останавливает пользовательский интерфейс после того, как он перестает отвечать после первого обновления, но он все еще не так отзывчив, как хотелось бы (прокрутка немного нервничает, так как добавление строки в поток ui, похоже, украсть фокус).

ответ

1

Вы просматривали виртуальный режим для элементов управления DataGridView? Он может предложить некоторый способ итерации только строк, которые вам нужно просмотреть (т. Е. Получать данные только при прокрутке пользователя).

См: http://msdn.microsoft.com/en-us/library/ms171622.aspx

PS: DataGrid стара, попробуйте DataGridView :)

+0

Теперь я расскажу об этом. Спасибо за быстрый ответ :) –

+0

Это отлично поработало, спасибо! –

0

В настоящее время я использую BackgroundWorker поток для выполнения оператора SQL и цикл по строкам в DataReader, перед использованием Control.BeginInvoke передать каждую новую строку обратно в поток пользовательского интерфейса, где добавлен в DataTable, привязанный к DataGrid.

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

http://www.codeproject.com/Articles/1086714/A-Template-For-Using-Datagrid-in-Monitoring-UI

Смежные вопросы