ich habe die bekannte HTTPProgress Prozedur verwendet, der zurückgelieferte String wird von einer anderen Prozedur() ausgewertet.
Aus dem GetXML werden dann vier Variablen gesucht und ausgewertet, diese 4 Werte stelle ich wiederrum in 4 Labelgadgets und 4 Progressbars visuell dar.
Der Auruf erfolgt jede Sekunde 2x (500ms).
Wenn diese Prozedurschleife läuft lässt sich das Programmfenster nur ungern verschieben bzw. reagiert etwas langsam.
An den Progressbar Gadgets liegt es nicht, auch ohne diese Darstellung reagiert das ganze verzögert.
Code: Alles auswählen
Procedure.s GetReceiverXmlAsString(URL.s) ;Holt die Daten(xml) vom Gerät ab, Timeout eingebaut
Debug "GetReceiverXmlAsString()"
Protected result, Download, Progress, Size, i=1
Debug "GetReceiverXmlAsString(): <" + URL.s + ">"
;GetXML.s = ""
Download = ReceiveHTTPMemory(URL.s, #PB_HTTP_Asynchronous)
If Download
Repeat
Progress = HTTPProgress(Download)
Select Progress
Case #PB_Http_Success
*XmlBuffer = FinishHTTP(Download)
Debug "Download finished (size: " + MemorySize(*XmlBuffer) + ")"
Size = MemorySize(*XmlBuffer)
GetXML.s = PeekS(*XmlBuffer, Size, #PB_UTF8|#PB_ByteLength)
;Debug GetXML.s
If FindString(LCase(GetXML), LCase("401 authentication required"))
GetXML="401"
Stop()
EndIf
;FreeMemory(*XmlBuffer)
Break
Case #PB_Http_Failed
Debug "Download failed"
sbText(L_BoxOffline)
Stop()
Break
Case #PB_Http_Aborted
Debug "Download aborted"
sbText(L_BoxOffline)
Stop()
Break
Default
Debug "Current download: " + Progress
If i = 2 * GetGadgetState(#spinTimeout) ; max. Timeout
Debug "Download timeout"
sbText(L_TimeoutMessage)
Stop()
Break
EndIf
i+1
EndSelect
Delay(500) ; Don't stole the whole CPU
ForEver
Else
Debug "Download error"
sbText(L_BoxOffline)
Stop()
EndIf
EndProcedure