Лучшие практики Внедрение ProgressMonitorDialog в Eclipse RCP - PullRequest
1 голос
/ 26 августа 2011

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

dialog.run(true,false, new IRunnableWithProgress() {
    @Override
    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
        monitor.beginTask("Main process", 10);
        for (int i = 0; i < 10; i++) {
            if (monitor.isCanceled()) return;
            monitor.subTask("Status  message");
            sleep(1000);
            // worked increases the monitor, the values are added to the existing ones
            monitor.worked(1);
            if(i == 3) {
                sleep(3000);
                callMe();//calling a long running function 
            }
            if(i == 9) {
                monitor.subTask("finishing setup..... please wait ");
                sleep(2000);
            }
        }
        monitor.done();
    }
});

Примечание: где-то в коде есть где-то в коде

здесь, в i == 3 вызывается операция / функция, которая занимает минимум 5 минут послевыполнение функции: прогресс продолжается.

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

можеткто-то показывает правильные методы программирования, показывая прогресс

1 Ответ

1 голос
/ 12 февраля 2014

Причина, по которой ваш код кажется абсурдным, заключается в том, что оборачивание долговременного метода в IRunnableWithProgress.run () на самом деле ничего не добавляет, в этом нет никакой магии.

Чтобы ProgressMonitorDialog (или, например, связанный API-интерфейс задания) работал для вас, вам нужно изменить «callMe ()», чтобы он принимал «IProgressMonitor monitor» в качестве параметра, и использовать его для прослушивания запросов на отмену, и используйте это также для сообщения о прогрессе.

Чтобы повторить то же самое, используя другую формулировку: необходимо рекурсивно добавить «IProgressMonitor monitor» в качестве параметра ко всем длительным вызовам методов. Все длительные операции должны создаваться с учетом этого (IProgressMonitor), если необходимо сообщить о каком-либо прогрессе и / или вы хотите, чтобы его можно было отменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...