Progressbar und keine Rückmeldung

02/11/2007 - 21:11 von Carsten Schade | Report spam
Hallo NG!

Ich habe ein Programm, welches mehrere komplexe Datenbankfunktionen ausführt
und weitere Prüfungen auf Dateien in verschiedenen Verzeichenissen ausführt.
Damit ich weiss, wie weit das Programm ist benutze ich die ProgressBars.
Aber leider hackt das irgendwie unmotiviert. Sprich, das Fenster -und der
Progressbar aktualisiert sich nicht mehr und im Fenstertitel steht (keine
Rückmeldung) hinter dem Titel. Aber alle Funktionen laufen ohne Probleme
weiter durch.
Bei mehreren Durchlaufen mit den gleichen Daten ist mir aufgefallen, dass
das mal nach 4% mal erst nach 35% und mal nach 14% passiert -völlig
willkürlich also irgendwie.

Wie kriege ich meine Anwendung dahin, dass sie das Fenster weiter neu
zeichnet.

Der Quelltext ist relativ lang, deshalb nur einen Auszug der Aufgaben

progressbar1.Maximum=dt.rows.count

For i=0 to dt.rows.count -1
sub_datenschreiben(i)
progressbar1.increment(1)
Next

Kann es sein, dass es an den Antwortzeiten des SQL-Servers liegt, dass da
eine (unsichtbare) Eigenschaft anhàngt, die den Status "keine Rückmeldung"
auslöst.

Jemand eine Idee?
 

Lesen sie die antworten

#1 Gerold Mittelstädt
02/11/2007 - 21:59 | Warnen spam
Hallo Carsten!

Carsten Schade schrieb:
Ich habe ein Programm, welches mehrere komplexe Datenbankfunktionen
ausführt und weitere Prüfungen auf Dateien in verschiedenen
Verzeichenissen ausführt. Damit ich weiss, wie weit das Programm ist
benutze ich die ProgressBars. Aber leider hackt das irgendwie
unmotiviert. Sprich, das Fenster -und der Progressbar aktualisiert
sich nicht mehr und im Fenstertitel steht (keine Rückmeldung) hinter
dem Titel. Aber alle Funktionen laufen ohne Probleme weiter durch.
Bei mehreren Durchlaufen mit den gleichen Daten ist mir aufgefallen,
dass das mal nach 4% mal erst nach 35% und mal nach 14% passiert
-völlig willkürlich also irgendwie.

Wie kriege ich meine Anwendung dahin, dass sie das Fenster weiter neu
zeichnet.

Der Quelltext ist relativ lang, deshalb nur einen Auszug der Aufgaben

progressbar1.Maximum=dt.rows.count

For i=0 to dt.rows.count -1
sub_datenschreiben(i)
progressbar1.increment(1)
Next

Kann es sein, dass es an den Antwortzeiten des SQL-Servers liegt,
dass da eine (unsichtbare) Eigenschaft anhàngt, die den Status "keine
Rückmeldung" auslöst.



"Kein Rückmeldung" bedeutet einfach nur, dass das Programm gerade
beschàftigt ist (oder sich aufgehàngt hat) und nicht auf die Nachrichten,
die es von Windows geschickt bekommt antwortet.

Làsst sich relativ einfach umgehen, indem Du die Datenabfrage in einen
eigenen Thread/BackgroundWorker verlegst und aus diesem heraus die
Progressbar (über Delegaten) aktualisierst.

etwa:

Dim worker As New Thread(AddressOf HierPassiertWas)
worker.Start()


Private Sub HierPassiertWas()
For i = 0 To dt.rows.count - 1
sub_datenschreiben(i)
UpdateProgressBar(100 \ dt.rows.count * i)
Next
End Sub

Private Delegate Sub UpdateProgressBarCB(ByVal value As Integer)

Private Sub UpdateProgressBar(ByVal value As Integer)
If Me.ProgressBar1.InvokeRequired Then
Dim d As New UpdateProgressBarCB(AddressOf UpdateProgressBar)
Me.Invoke(d, New Object() {value})
Else
ProgressBar1.Value = value
End If
End Sub


Viele Grüße!

Ähnliche fragen