Wie mache ich einen Dialog mit Fortschrittsbalken während des Abarbeitens von Prozeduren sichtbar?

Ich habe hier ein Datenbankprojekt, bei dem das Importieren von Daten aus verschiedenen Quellen einige Zeit in Anspruch nimmt. Zum Importieren nutze ich hintereinander verschiedene Basic-Prozeduren. Zum Schluss erscheint eine Messagebox, dass der Import fertig ist.

Schöner wäre es natürlich, wenn während der Imports ein Fortschritt angezeigt würde. Ich habe mich da an einem Dialog mit Fortschrittsbalken versucht, nur erscheint der Dialog leider erst, wenn alle Prozeduren abgearbeitet wurden.

Hier einmal ein möglichst einfaches Beispiel:


GLOBAL oDialog1 AS OBJECT
DIM arProcedures()

SUB Dialog1Start
	DialogLibraries.LoadLibrary("Standard")
	oDialog1 = createUnoDialog(DialogLibraries.Standard.D_Import)
	oDialog1.setVisible(true)
	FOR i = 1 TO uBound(arProcedures)+1
		arProcedures(i-1)
		stLabel = "Vorgang " & i & " von " & uBound(arProcedures)+1
		Progress(i*100/(uBound(arProcedures)+1), stLabel)
	    Wait(1000)
	NEXT
	oDialog1.dispose()
END SUB

SUB Progress(doVal AS DOUBLE, stLabel AS STRING)
	oDialog1.getControl("ProgressBar").setValue(doVal)
	oDialog1.getControl("lblProgressBar").Text = stLabel	
END SUB

SUB StartImport
	arProcedures = array(Pro1,Pro2)
	Dialog1Start
END SUB

SUB Pro1
     Wait 2000
END SUB

SUB Pro2
     Wait 2000
END SUB

Das Ganze braucht einen Dialog D_Import, der ein Beschriftungsfeld lblProgressBar und einen Fortschrittsbalken ProgressBar hat.

Starte ich mit StartImport, dann verläuft zuerst die Zeit für die beiden Prozeduren und danach wird dann der Dialog sichtbar - obwohl der doch vorher auf setVisible gestellt wurde. Die Wartezeit in der Schleife des Dialogs ist nur eingebaut um zu sehen, ob der Fortschrittsbalken funktioniert. Das liegt wohl daran, dass ich die Prozeduren in ein Array geschrieben habe. Schreibe ich die Prozeduren direkt in die Schleife (mit SELECT CASE …), dann klappt das Ganze. Es hängt also eher daran: Wie nutze ich so einen Dialog mit Hilfe eines Arrays, das Prozeduren aufruft?

So gehts:
Dialog_Fortschrittsbalken
Bild für 13 Prozeduren, Code unten für 2 Prozeduren.

GLOBAL oDialog1 AS OBJECT

SUB Dialog1Start
	DialogLibraries.LoadLibrary("Standard")
	oDialog1 = createUnoDialog(DialogLibraries.Standard.D_Import)
	oDialog1.setVisible(true)
	FOR i = 1 TO 2
		stLabel = "Vorgang " & i & " von " & 2
		Progress(i*100/2), stLabel)
        SELECT CASE i
			CASE 1
				Pro1
			CASE 2
                Pro2
		END SELECT
	NEXT
	oDialog1.dispose()
END SUB

SUB Pro1
     Wait 2000
END SUB

SUB Pro2
     Wait 2000
END SUB

Weitergabe der Prozeduren über ein Array bekomme ich nicht geregelt. Sind zwei verschiedene Import-Prozeduren, aber dann wird eben Dialog1Start unter anderem Namen und mit deutlich mehr internen Aufrufen gestartet.