Hallo zusammen,
so, ich war den halben Tag beschäftigt meinen Code umzubauen und die andere Hälfte mit Einkaufen (mit Frau...
) und jetzt komme ich auch mal dazu, hier nachzuschauen was es neues gibt. Und war erst mal positiv überrascht von den vielen Antworten.
Also, Stand der Dinge: Zuerst war es von der Aufgabenverteilung so: Update-Form für das UI, eine
Unit mit der Logik (Connect, Download, Disconnect, Installation der neuen programmdateien usw.) und das Datenmodul.
Das Datenmodul blieb bis auf ein paar kleine Änderungen wie es ist. Die
Unit mit der Logik entfällt, die habe ich heute neu programmiert. Sie beinhaltet jetzt meinen Thread, der den Download durchführt.
Die Beispiele im WEB (nicht die von euch hier...die habe ich ja jetzt erst gelesen) hatten hinsichtlich der Synchronisierung eines gemeinsam: Der Thread muss mit dem aufrufenden Objekt kommunizieren, damit er z.B. die Fortschrittanzeige aktualisieren kann. So eine Vorgehensweise geht mir gegen den Strich. Der Thread soll sich um den Download kümmern müssen, und sonst nichts! Das war der Ansatz. Und, aktueller Stand, es funktioniert.
Das Installationsprogramm fordert irgendwann am Anfang die Eingabe der Lizenznummer. Dann wird die Lizenz vom WEB_Server heruntergeladen. Die Verbindung steht also zu dem Zeitpunkt schon. Normalerweise wird sie getrennt, und das Installationsprogramm fortgesetzt. Jetzt setze ich die Installation genauso fort, und starte den Thread.
Während der weiteren Installation (das Setup kopiert die Dateien usw.) lädt der Thread eventuell vorhandene aktuellere Dateien herunter.
Ist die Installation abgeschlossen, kann es im Großen und Ganzen nur zwei Zustände geben: Der Download-Thead arbeitet noch, oder ist schon fertig. Wenn er schon fertig ist, gibt (bzw. gab) es überhaupt keine Anforderung etwas zu synchronisieren, und wenn das Setup schon fertig ist und dann quasi auf den Thread warten muss...hat das Setup ja nichts mehr zu tun. Mit einem Timer frage ich dann die property "Progress" des Threads ab, aktualisiere den Progressbar in der MainForm, und warte bis der Thread fertig ist.
Exakt so verwendet dann später mein Update-Programm den Thread. Es sind darin nur noch ein paar Zeilen Code zu ändern. UI, Logik und Daten voneinander zu trennen hat sich wieder mal bewährt.
Das ist so einfach, dass ich mich im Nachhinein wundere, es nicht schon vorher so gemacht zu haben. Und die "Angst" vor Threads ist jetzt auch weg. Im Gegenteil, ich habe jetzt Lust auf mehr.
Zitat:
Die eigentliche Frage lauten: An welcher Stelle kommst Du nicht weiter?
Danke Mavarik, die Motivation es einfach noch mal zu versuchen, kam von dir.
Vielen Dank auch an alle die sich Mühe und Gedanken gemacht haben. Wie gesagt, es funzt momentan schon, aber ein paar kosmetische Kleinigkeiten sind noch zu erledigen. Und dann kommen ja noch ein paar neue Anforderungen auf mich zu.
Das Setup ist nämlich nicht nur für Installation und Deinstallation zuständig, auch für Datensicherung, Datenrücksicherung, PC-Umzug(Migration), Datenbankprüfung usw. Also noch genügend Potential für Threads, um zum Beispiel gleichzeitig mehrere Mandanten(-Datenbanken) zu sichern. BTW wenn es "nur" ein popeliges Installationsprogramm wäre, hätte ich es ja nicht selber geschrieben, sondern mit Inno gemacht.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen