SWT - настройка моего ProgressMonitorDialog

У меня есть рабочий ProgressMonitorDialog, но я хочу убедиться, что я его правильно настраиваю.

Сначала код:

Способ создания диалога

 public void startProgressBar() {
  try {
     new ProgressMonitorDialog(getShell()).run(true, true,
        new ProgressBarThread());
  } 
  catch (InvocationTargetException e) {
     MessageDialog.openError(getShell(), "Error", e.getMessage());
  } 
  catch (InterruptedException e) {
     MessageDialog.openInformation(getShell(), "Cancelled", e.getMessage());
  }
}

Файл класса

 class ProgressBarThread implements IRunnableWithProgress {
  private static final int TOTAL_TIME = 1000;

  public ProgressBarThread() {

  }

  public void run(IProgressMonitor monitor) throws InvocationTargetException,InterruptedException {
     monitor.beginTask("Creating PDF File(s): Please wait.....", IProgressMonitor.UNKNOWN);
     for (int total = 0; total < TOTAL_TIME ; total++) {
        Thread.sleep(total);
        monitor.worked(total);
        if (total == TOTAL_TIME / 2) monitor.subTask("Please be patient... Operation should finish soon.");
    }
    monitor.done();

  }
}

Метод, который вызывает ProgressBar и запускает операцию создания PDF-файла.

private void startSavePdfOperation() {
  Display.getDefault().asyncExec(new Runnable() {
     public void run() {
        startProgressBar();
     }
  });
  saveOp = new AplotSaveOperation(appReg.getString("aplot.message.SAVETOPDF"), "PDF", session);
  saveOp.addOperationListener(new MyOperationListener(this) {

     public void endOperationImpl() {
        java.io.File zipFile = null;
        try {               
           AplotSaveResultsParser.SaveResult saveResults = saveOp.getSaveResults();
           if (saveResults != null) {
           ETC.....   ETC......  

Вопросов:

Поскольку ProgressMonitorDialog является графическим интерфейсом, его необходимо выполнить в Display.getDefault (). AsyncExec?

Если ProgressMonitorDialog выполняется в отдельном потоке, как он узнает, что закрывается, когда операция завершена?

Есть ли связь между индикатором выполнения и операцией?

Я прав в предположении, что цикл for в классе ProgressBarThread - это в основном таймер, который держит монитор открытым?

Есть ли способ увеличить скорость индикатора ProgressMonitorDialog, также вы можете удалить кнопку отмены?

Это то, что я думаю, что происходит в настоящее время.

Я запускаю индикатор выполнения непосредственно перед запуском прослушивателя операций в формате PDF.Смотрите startSavePdfOperation () выше

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

Когда операция PDF завершается, класс операций слушателя закрывает диалоговое окно основного графического интерфейса.

public void endOperation() {
 try {
    endOperationImpl();
 }
 finally {
    Display.getDefault().asyncExec(new Runnable() {
       public void run() {
          w.getShell().setCursor(new Cursor(Display.getCurrent(), SWT.CURSOR_ARROW));
          w.recursiveSetEnabled(getShell(), true);
          w.getShell().setEnabled(!getShell().getEnabled());
          w.close();
       }
    });
 }

}

Я не уверен, что происходит с монитором ProgressBarThread?

Это возможно?

Когда начинается операция PDF, ProgressMonitorDialog открывается и запускает индикатор. Хорошо с сохранением этого неизвестным.

Когда операция PDF завершается, монитор закрывается, затем базовый диалог

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос