Hallo Leute,
ich möchte mein "Update-System" in einen Thread auslagern. Das habe ich damals schonmal probiert, das ist mir aber jetzt nicht mehr so recht. Zumal es ziemlich wirr ist und mit Messages arbeitet. Das lief ungefähr so ab:
Zitat:
MainVLC [Update-suchen-Button] -> Updater-Klasse wird erstellt und ruft "Thread UpdateSuchen" auf. Er arbeitet und sendet Message an MainVLC mit seinen Ergebnissen.
Updates werden vom Benutzer ausgewählt, der Updater-Klasse übergeben und die startet eine Schleife in der die Downloads nacheinander durch den Download Thread geladen werden
Da hatte ich das Problem, die Ereignisse OnWork etc. von IdHTTP an die MainVCL weiterzuleiten, damit dem User auch gezeigt wird, wie weit der Fortschritt ist.
Nun würde ich es gerne so machen:
Ich würde gerne die Threads so nahe an die
VCL heranholen, wie nur möglich, damit ich ohne große Probleme aus einem Thread auf die
VCL zugreifen kann (Fortschrittsanzeige).
Zitat:
Also, die Updater-Klasse fällt komplett weg. Die
VCL erstellt einen Thread der nach Updates sucht in diese in einer Liste anzeigt. Danach klickt der User auf "downloaden" und die
VCL erstellt in einer Schleife Threads, die die Updates nacheinander Downloaden. Dabei bekommt die idHTTP-Komponente threadinterne Methoden für OnWorkBegin, OnWork etc zugewieden. In diesen Methoden wird synchronisiert auf die
VCL zugegriffen und eine Prozentzahl erhöht.
Nur eine Frage dazu habe ich noch. Angenommen, ich setze das so um, dann werde ich im Download-Thread eine Variable "ParentForm" haben, die eine Referenz zur
VCL-Form darstellt. Die
VCL-Form hat die Methode "ZeigeDownloadFortschritt". Wenn ich den Thread programmiere, wie kann ich dann die Prozedur "ZeigeDownloadFortschritt" aus dem Thread über die ParentForm-Variable aufrufen. Folgendes geht wohl schlecht:
Synchronize(ParentForm.ZeigeDownloadFortschritt);
Ziemlich viel Text - ich hoffe, ihr wisst, was ich meine und könnt mir ein paar Ratschläge geben bzw. diese Struktur so absegnen
Danke im Voraus