2010-04-02 4 views
2

У меня есть несколько длительная хранимая процедура, вызываемая из приложения PB. Я хочу, чтобы пользовательский интерфейс показывал индикатор, который он обрабатывает, но я не знаю точного прогресса. То есть я не могу сказать, выполнено ли это 10% или 90%. Все, что я знаю, это когда это делается.PowerBuilder Неопределенный индикатор выполнения

Чтобы дать пользователю что-то посмотреть, я хотел бы поставить где-нибудь окно выполнения «Inderterminate» (горизонтальное). Я просмотрел документацию для встроенного элемента управления HProgressBar и не вижу, как заставить это поведение.

Короткая запись собственного контроля или импорт другого, есть ли способ сделать это?

ответ

2

Powerbuilder не включает встроенный способ для этого, но вы можете использовать элементы управления Win32. Существует хорошая статья об этом здесь (который включает в себя пример прогресса баров!):

Это старая статья, но она по-прежнему относится к более новым версиям Powerbuilder.

0

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

Он должен будет дождаться завершения операции до того, как будет возвращено управление.

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

+0

Пока вы поднимаете хороший момент, не совсем точно, что PB не многопоточен. Вы можете создавать потоки с помощью SharedObjectRegister(), и здесь может быть использован Async DB Parm. Однако, в зависимости от того, где находится вес воздействия производительности, OP может захотеть создать поток для извлечения, в то время как основной поток запускает графический интерфейс. Если основная часть накладных расходов связана с передачей данных, это может быть сделано в одном потоке с RetrieveRow, хотя это имеет свое влияние на производительность. – Terry

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