Ahmed Dabas Ответов: 1

Как отобразить индикатор выполнения При загрузке объекта datatable из базы данных


Как можно отобразить индикатор выполнения во время загрузки данных из базы данных с помощью Entity Framework?

Что я уже пробовал:

я пытаюсь использовать Backgroungworker, но потерпел неудачу :(

Maciej Los

А что вы пробовали?

1 Ответов

Рейтинг:
2

OriginalGriff

Если вы хотите показать индикатор выполнения во время выполнения длинной задачи, то вам нужно выполнить длинный процесс во втором потоке и обновить элемент управления прогрессом в "обычном" потоке пользовательского интерфейса - так как вы не можете получить доступ ни к какому элементу управления из потока, отличного от потока пользовательского интерфейса (и вы получите "исключение перекрестного потока", если попытаетесь).
Обычно BackgroundWorker идеально подходит для этого, так как он обеспечивает механизм обновления хода выполнения через событие, которое обрабатывается в исходном потоке и позволяет вам напрямую обновлять элемент управления ходом выполнения.

Но... если ваши данные не загружаются через SqlDataReader, когда вы можете регулярно обновлять прогресс, это не поможет. Если вы используете DataAdapter - а EF это делает - то нет никаких признаков "прогресса": вся работа выполняется на стороне сервера, и клиент (ваше приложение) получает информацию о данных только тогда, когда все они завершены: это монолитный процесс.

Лучше всего использовать BackgroundWorker (или непосредственно поток), иначе пользовательский интерфейс вообще не будет обновляться, и использовать ProgressBar в режиме Marquee.