Seite 1 von 1

Frage: Aktualisierung von ListIconGadgets

Verfasst: 08.03.2011 23:49
von Mr.X
Hallooo erstmal.

Ich war lange nicht im Forum aktiv. Jetzt brauche ich einen kurzen Tip.

Also folgendes Problem:
Ich habe ein ListIconGadget, das eine Spalte für Dateinamen und zwei Ergebnis Spalten besitzt.
In einer Schleife werden die Dateinamen abgearbeitet und auf meinen FTP-Server geschrieben [funktioniert prima, soweit]. Innerhalb der Schleife soll das Bearbeitungsergebnis und danach der erfolgreiche oder fehlgeschlagene FTP-Transfer in die zugehörige Spalte geschrieben werden [mit SetGadgetItemText]. Der FTP-Transfer erfolgt asynchron. Mein Problem: Die Anzeige der in das ListIconGadget geschreibenen Ergebnisse erfolgt erst nach Schließen der FTP-Verbindung. Eine parallele Ausgabe z.B. des Dateinamens in der Statuszeile vor dem Transfer wird sofort angezeigt.

Hier der Code-Abschnitt [gLIC_FileList ist das ListIconGadget]

Code: Alles auswählen

                        StatusBarText(#STB_Main, 0, " FTP-Verbindung vorbereiten ...")
                        ftpNo = OpenFTP(#PB_Any, FTP_Server$, FTP_User$, FTP_Pwd$)
                        Debug ftpNo
                        
                        If ftpNo
                            Debug "\rai"
                            SetFTPDirectory(ftpNo, "rai")
                            Debug "\" +LastFirma$ +"_database"
                            SetFTPDirectory(ftpNo, LastFirma$ +"_database")
                            
                            For i = 1 To CountGadgetItems(gLIC_FileList)
                                tmpFilename$ = DB_Path$ +GetGadgetItemText(gLIC_FileList, i-1, 0)
                                StatusBarText(#STB_Main, 0, " Verschlüsseln und FTP (" +tmpFilename$ +")")
                                
                                If FileSize(tmpFilename$)
                                    If AES_Encrypt (tmpFilename$)
                                        SetGadgetItemText(gLIC_FileList, i-1, #TXT_OK, 2)
                                    Else
                                        SetGadgetItemText(gLIC_FileList, i-1, #TXT_Err, 2)
                                    EndIf
                                EndIf
                                InvalidateRect_(GadgetID(gLIC_FileList), 0, #True)
                                
                                Result = SendFTPFile(ftpNo, tmpFilename$ +".aes", GetGadgetItemText(gLIC_FileList, i-1, 0) +".aes", #True)
                                While FTPProgress(ftpNo) <> #PB_FTP_Finished
                                    If FTPProgress(ftpNo) <> #PB_FTP_Error
                                        :
                                    Else
                                        AbortFTPFile(ftpNo)
                                        SetGadgetItemText(gLIC_FileList, i-1, #TXT_Err, 3)
                                        Break
                                    EndIf
                                    ;Delay(100)
                                Wend
                                
                                If FTPProgress(ftpNo) = #PB_FTP_Finished
                                    SetGadgetItemText(gLIC_FileList, i-1, #TXT_OK, 3)
                                EndIf
                            Next
                            
                            CloseFTP(ftpNo)
                            StatusBarText(#STB_Main, 0, " FTP-Verbindung beendet")
                        EndIf
Hat jemand eine Lösung?

Danke schon 'mal im voraus.

Mr.X

Re: Frage: Aktualisierung von ListIconGadgets

Verfasst: 08.03.2011 23:56
von ts-soft
Du baust Deinen Mainloop in etwa so auf:

Code: Alles auswählen

Global PrgEnd
Procedure DoEvents(timeout = 0)
  Select WaitWindowEvent(timeout)
    Case #PB_Event_CloseWindow : PrgEnd = #True
    Case ...
    Case ...
  EndSelect
EndProcedure

; mainloop
Repeat
  DoEvents()
Until PrgEnd
Jetzt noch ein paar DoEvents(20) in Deine FTP Routinen und die Anzeige funktioniert.

Re: Frage: Aktualisierung von ListIconGadgets

Verfasst: 09.03.2011 00:00
von Mr.X
Danke ts-soft.

Ich habe an anderer Stelle auch eine Lösung gefunden. Eine simple Schleife

Code: Alles auswählen

While WindowEvent() : Wend
an der Stelle des Delay(100)-Kommentars und die Anzeige funktioniert.

Also, das Problem ist gelöst.

Re: Frage: Aktualisierung von ListIconGadgets

Verfasst: 09.03.2011 00:02
von ts-soft
Jetzt werden aber Events verschluckt, das Problem ist dann ein totes Fenster!
Wenn Du es tatsächlich so lösen möchtest, disable bitte alle Gadgets vorher,
sonst verärgerst Du die Nutzer Deines Programmes.