SWT - Tweaking meu ProgressMonitorDialog

Eu tenho um trabalho ProgressMonitorDialog, mas eu quero ter certeza de que estou configurando corretamente.

Primeiro o código:

Método para criar o diálogo

 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());
  }
}

Arquivo de classe

 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();

  }
}

Método que chama ProgressBar e executa uma operação de criação de arquivo 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......  

Questões:

Sendo o ProgressMonitorDialog é uma GUI, ele precisa ser executado em um Display.getDefault (). AsyncExec?

Se o ProgressMonitorDialog está sendo executado em um segmento separado, como ele sabe para fechar quando a operação é finalizada?

Existe alguma relação entre a barra de progresso e a operação?

Estou correto em assumir que o loop for na classe ProgressBarThread é basicamente o temporizador que mantém o monitor aberto?

Existe uma maneira de aumentar a velocidade do indicador ProgressMonitorDialog, você também pode remover o botão de cancelamento?

Isso é o que estou pensando que está acontecendo atualmente.

Estou iniciando a barra de progresso antes de iniciar o PDF Operation ListenerVeja startSavePdfOperation () acima.

A barra de progresso está sendo executada como desconhecida, mas usando um loop for para manter a caixa de diálogo da barra de progresso aberta, enquanto a operação está sendo executada em um encadeamento em segundo plano.
Veja a classe ProgressBarThread acima

Quando a operação do PDF é concluída, a classe de operação do ouvinte fecha a caixa de diálogo da GUI base.

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();
       }
    });
 }

}

Não tenho certeza do que está acontecendo com o monitor ProgressBarThread?

Isso é possível?

Quando a Operação PDF inicia, o ProgressMonitorDialog abre e inicia o indicador. OK, mantendo-o desconhecido.

Quando a Operação PDF é concluída, o monitor fecha e, em seguida, a caixa de diálogo base

Estou apenas querendo abrir o diálogo da barra de progresso que informará ao usuário que sua solicitação está funcionando em segundo plano.

Como afirmado o código acima funciona, mas eu tenho medo, deixando o fechamento da Base GUI, destruir o meu Progress Thread e Monitor não é uma boa prática.

questionAnswers(1)

yourAnswerToTheQuestion