eclipse rcp: как заблокировать пользовательский интерфейс во время работы в фоновом режиме - PullRequest
1 голос
/ 12 июля 2011

У меня есть кнопка тестирования в диалоге, когда пользователь нажимает эту кнопку, мое приложение будет пытаться подключиться к базе данных через JDBC.

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

Например: в этом диалоге есть еще одна кнопка «отмена», нажатие этой кнопки закроет диалоговое окно. Если вы нажмете кнопку «Отмена» во время выполнения задания подключения, диалоговое окно не будет закрыто до завершения задания подключения!

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

Я использую Eclipse Indigo на Windows 7


Мой вопрос должен быть таким:
Как игнорировать любые действия пользователя при выполнении задания в фоновом режиме.

Ответы [ 2 ]

2 голосов
/ 28 марта 2017

Два способа игнорировать любые действия пользователя, пока задание выполняется в фоновом режиме:

Первый вызов - shell.setEnabled(false) до начала операции и shell.setEnabled(true) после завершения операции. (необязательно) в сочетании с BusyIndicator для предоставления пользователю обратной связи.

Второй использует модальное диалоговое окно без кнопок, поэтому пользователь не может закрыть его (стили, например, SWT.APPLICATION_MODAL | SWT.SHEET | SWT.NO_TRIM). Диалог содержит метку, например "Загрузка ..." или ProgressBar. При использовании RCP опция ProgressMonitorDialog является опцией.

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

@screentiger.com Я не видел в статье, где вы рассказывали, как вы игнорируете какие-либо действия пользователя, пока работа выполняется в фоновом режиме. Буду признателен, если вы будете более конкретны и, возможно, приведете пример кода.

0 голосов
/ 16 июля 2011

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

Для вашей работы вам нужно создать новый поток, чтобы сделать это, а это не так.долгосрочную работу в потоке пользовательского интерфейса, используйте executor представьте в 1.5.

, лучший способ - использовать механизм Job eclipse.Вы можете начать учиться у: http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html I

...