2010-12-13 5 views
1

У меня есть многоуровневое приложение в C#, которое должно выполнять задачи в базе данных (при первом использовании мы можем создать базу данных и заполнить ее некоторыми данными). Когда я изначально разработал приложение, я не учитывал возможный контроль уровня выполнения, не говоря уже о каких-либо сообщениях о прогрессе любого рода. Как я могу изменить дизайн приложения, чтобы иметь возможность сообщать о результатах работы базы данных на уровне пользовательского интерфейса? Есть ли решение, которое можно использовать повторно и не заставляет меня изменять все мои функции, чтобы получать дополнительные данные для отчетности?Проектирование многоуровневого приложения для использования индикатора выполнения

+0

Удачи. (Отчетность) прогресс тяжелый – SLaks

ответ

0

№ В зависимости от того, насколько велика ваша заявка, у вас впереди много работы.

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

Хорошим местом для начала было бы изучить использование BackgroundWorker (здесь есть пример на MSDN - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx). Когда вы знакомы с BackgroundWorker, вы должны быть в лучшем положении, чтобы решить, какие изменения необходимо внести в ваше приложение.

0

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

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

Редактировать: Я думаю, что такой же подход будет работать для задач, которые происходят в клиенте. Но, тем не менее, здесь можно было бы использовать класс индикаторов статического прогресса.

1

Как сказал Грег, впереди много работы. Однако есть много способов подойти к проблеме, и лучшее для вас зависит от того, какая контекстная информация переходит от клиента к слоям приложения/базы данных уже. Например, если токен сеанса или идентификатор транзакции передается от клиента к приложению в ходе выполнения запроса/транзакции или ссылки подтверждения, переданной асинхронно из приложения в клиент, то для этих запросов/транзакций, для которых необходимо было предоставить отчет о ходе работы, чтобы приложение могло обновить таблицу состояния, которую клиент мог запросить. Это может сократить объем требуемой работы. В принципе, вам нужно рассмотреть «промежуточное ПО» уже на месте и посмотреть, можно ли использовать какое-либо из них для корреляции транзакций между уровнями.

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