SWT - Ajustando mi ProgressMonitorDialog

Tengo un ProgressMonitorDialog en funcionamiento, pero quiero asegurarme de que lo estoy configurando correctamente.

Primero el Código:

Método para crear un 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());
  }
}

Archivo de clase

 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 llama a ProgressBar y ejecuta una operación de creación de archivos 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......  

Preguntas:

Siendo el ProgressMonitorDialog es una GUI, debe ejecutarse en un Display.getDefault (). AsyncExec?

Si ProgressMonitorDialog se está ejecutando en un subproceso independiente, ¿cómo puede cerrarse cuando se finaliza la operación?

¿Hay alguna relación entre la barra de progreso y la operación?

¿Tengo razón al suponer que el bucle for en la clase ProgressBarThread es básicamente el temporizador que mantiene abierto el monitor?

¿Hay alguna forma de aumentar la velocidad del indicador de ProgressMonitorDialog? ¿También puede eliminar el botón de cancelación?

Esto es lo que estoy pensando que está pasando actualmente.

Estoy iniciando la barra de progreso justo antes de iniciar la Escucha de la Operación PDFVer startSavePdfOperation () arriba

La barra de progreso se ejecuta como desconocida, pero utiliza un bucle for para mantener abierto el cuadro de diálogo de la barra de progreso, mientras la operación se ejecuta en un subproceso en segundo plano.
Ver la clase ProgressBarThread arriba

Cuando la operación de PDF completa la clase de operación de escucha, se cierra el diálogo de la 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();
       }
    });
 }

}

No estoy seguro de lo que está sucediendo con el monitor ProgressBarThread?

¿Es posible?

Cuando se inicia la operación PDF, el ProgressMonitorDialog abre e inicia el indicador. Está bien con mantenerlo desconocido.

Cuando finaliza la operación de PDF, el monitor se cierra, luego el cuadro de diálogo base

Solo quiero abrir el cuadro de diálogo de la barra de progreso que informará al usuario de que su solicitud está funcionando en segundo plano.

Tal como se indica, el código anterior funciona, pero me temo que permitir el cierre de la GUI base, destruir mi Hilo y monitor de progreso no es una buena práctica.

Respuestas a la pregunta(1)

Su respuesta a la pregunta