WPF анимация «Пожалуйста, подождите» с использованием фоновых рабочих - возможно ли это - PullRequest
4 голосов
/ 04 октября 2010

Недавно наше приложение WPF / Entity Framework 4.0 стало нестабильным после того, как мы начали использовать фоновые рабочие для загрузки данных из сущности.Мы делали это для того, чтобы запустить вращающуюся диаграмму «Пожалуйста, подождите», пока рабочий BG извлекал данные из базы данных, но мы начали испытывать многочисленные проблемы с подключением к EF и другие необъяснимые ошибки в случайные моменты времени.Сообщение от члена команды Microsoft EF, казалось, предполагало, что EF не является «поточно-ориентированным», и как только мы удалили рабочих BG, проблемы действительно исчезли.

Это оставляет нас с проблемой опыта пользовательского интерфейса - мыбольше нет удобного и удобного вращающегося устройства «Please-Wait» во время загрузки данных.У кого-нибудь есть какие-либо предложения относительно других способов, которыми это можно сделать, не помещая загрузку данных в работника BG?

Спасибо

Ответы [ 2 ]

5 голосов
/ 04 октября 2010

Вы можете сделать промежуточный шаг. Вместо BackgroundWorker создайте отдельный поток, который будет работать, пока ваше приложение не закроется. Этот поток создает ваши соединения и обрабатывает все связи с базой данных. Отправьте ему сообщения, пусть он сделает работу, затем получите результаты. Это освободит пользовательский интерфейс, одновременно предотвращая одновременное использование EF несколькими потоками.

1 голос
/ 04 октября 2010

Ранее я использовал BackgroundWorkers, и они действительно предназначены для выполнения задачи, делегированной им в фоновом режиме, для вызова событий, связанных с задачей, и смерти по завершении. Наиболее распространенным примером является обновление индикатора выполнения из фонового потока. Элементы пользовательского интерфейса могут быть обновлены только из потока пользовательского интерфейса, поэтому по этой причине желательны фоновые рабочие процессы, которые вызывают события в потоке пользовательского интерфейса.

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

...