Guten Abend,
ich sitze zurzeit an einem Programm welches immer 4 feste Dateien aktualisieren soll. Bei jedem Start des Programms werden die Zahlen von vier Textdokumenten (welche auf einem Webspace liegen | Ein Textdokument = eine der vier Dateien) in einer Variable gespeichert. Um an die lokale Version ran zu kommen wird mithilfe von GetSetting die lokale Version aus der Registry bezogen (auch viermal da vier verschiedene Dateien). Nun wird überprüft ob ob die Webversionszahl größer als die Lokaleversionszahl ist, wenn ja dann wird eine MarkerVariable = 1 gesetzt. Am Ende wird dann bei jeder Datei gefragt ob der dazugehörige Marker = 1 ist, wenn ja dann muss die Datei aktualisiert werden. Kommen wir zu meinen zwei Problemen. Das erste Problem wäre die Optimierung des Codes... ich kann mir nicht vorstellen das dies besonders sauber ist wie ich es gemacht hab:
Spoiler anzeigen
Was kann man da alles optimieren? Es ist wichtig die 4 Dateien einzeln zu behandeln da es z.B. vorkommen kann das nur Datei-Y und Datei-M aktualisiert werden müssen. Des Weiteren wie schon im Code ersichtlich habe ich ein Problem mit dem Kern des Programmes... dem Download. Soweit Google die Wahrheit sagt gibt es zwei Arten von Downloads. Einmal der Download via HTTPRequest welcher aber das Programm während des Downloads einfriert und einmal der Asynchrone Download. Es wäre wichtig das die Downloads direkt hintereinander erfolgen also zum Beispiel:
Datei-C und Datei-M haben eine höhere Webversion als die lokale Version. Also wird erst Datei-C gedownloadet (die Einzelprogressbar beginnt bei 0 und füllt sich mit dem Download, das Programm pausiert an der Stelle bis zum Ende, ist aber nicht eingefroren) und dann die Gesamtprogressbar auf 50 gesetzt (weil 100 / 2 = 50). Danach wird die Datei-M gedownloadet (die Einzelprogressbar setzt sich zurück und beginnt wieder sich zu füllen, genau das gleiche wie zuvor bei Datei-C).
Ich habe bereits mehrere Lösungen probiert doch fror mir entweder das Programm ein, die Downloads liefen nicht hintereinander oder es war nicht möglich eine Progressbar einzubinden. Langsam verzweifel ich...
ich sitze zurzeit an einem Programm welches immer 4 feste Dateien aktualisieren soll. Bei jedem Start des Programms werden die Zahlen von vier Textdokumenten (welche auf einem Webspace liegen | Ein Textdokument = eine der vier Dateien) in einer Variable gespeichert. Um an die lokale Version ran zu kommen wird mithilfe von GetSetting die lokale Version aus der Registry bezogen (auch viermal da vier verschiedene Dateien). Nun wird überprüft ob ob die Webversionszahl größer als die Lokaleversionszahl ist, wenn ja dann wird eine MarkerVariable = 1 gesetzt. Am Ende wird dann bei jeder Datei gefragt ob der dazugehörige Marker = 1 ist, wenn ja dann muss die Datei aktualisiert werden. Kommen wir zu meinen zwei Problemen. Das erste Problem wäre die Optimierung des Codes... ich kann mir nicht vorstellen das dies besonders sauber ist wie ich es gemacht hab:
VB.NET-Quellcode
- Public Class Main
- Public Shared DateiC_Web As String
- Public Shared DateiD_Web As String
- Public Shared DateiM_Web As String
- Public Shared DateiY_Web As String
- Public Shared DateiC_Local As String
- Public Shared DateiD_Local As String
- Public Shared DateiM_Local As String
- Public Shared DateiY_Local As String
- Public Shared ProgressbarFortschritt As Double = 100
- Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim DateiC_Marker As Double
- Dim DateiD_Marker As Double
- Dim DateiM_Marker As Double
- Dim DateiY_Marker As Double
- Dim DateiGesamtMarker As Double
- Using wc As New Net.WebClient()
- DateiC_Web = wc.DownloadString("http://update.webseite.de/datei-c.txt")
- DateiC_Local = GetSetting("Programm", "DateiVersionen", "Datei-C")
- If DateiC_Web > DateiC_Local Then
- DateiC_Marker = 1
- End If
- DateiD_Web = wc.DownloadString("http://update.webseite.de/datei-d.txt")
- DateiD_Local = GetSetting("Programm", "DateiVersionen", "Datei-D")
- If DateiD_Web > DateiD_Local Then
- DateiD_Marker = 1
- End If
- DateiM_Web = wc.DownloadString("http://update.webseite.de/datei-m.txt")
- DateiM_Local = GetSetting("Programm", "DateiVersionen", "Datei-M")
- If DateiM_Web > DateiM_Local Then
- DateiM_Marker = 1
- End If
- DateiY_Web = wc.DownloadString("http://update.webseite.de/datei-y.txt")
- DateiY_Local = GetSetting("Programm", "DateiVersionen", "Datei-Y")
- If DateiY_Web > DateiY_Local Then
- DateiY_Marker = 1
- End If
- End Using
- DateiGesamtMarker = DateiC_Marker + DateiD_Marker + DateiM_Marker + DateiY_Marker
- If DateiGesamtMarker > 0 Then
- btnStartProgram.Enabled = False
- pgbDownloadEinzel.Value = 0 //Fortschritt einer Datei
- pgbDownloadGesamt.Value = 0 //Gesamter Fortschritt der Aktualisierung
- ProgressbarFortschritt = ProgressbarFortschritt / DateiGesamtMarker //Die gesamte Progressbar (Value=100) wird durch die Anzahl der nötigen Aktualisierungen geteilt. Das Ergebnis ist die Zahl
- die nach jedem erfolgreichen Download zu der Gesamtprogressbar gezählt wird. (Zum Beispiel wenn zwei Dateien aktualisiert
- werden müssen wird 100 / 2 geteilt was 50 ergibt. Also wird nach jedem erfolgreichen Download pgbDownloadGesamt.Value =
- pgbDownloadGesamt.Value + ProgressbarFortschritt gerechnet.
- If DateiC_Marker = 1 Then
- pgbDownloadEinzel.Value = 0
- DateiC_Download.DownloadFileAsync(New Uri("http://update.webseite.de/datei-c.dat"), "datei-c.dat") // Funktioniert nicht
- SaveSetting("Programm", "DateiVersionen", "Datei-C", DateiC_Web)
- pgbDownloadGesamt.Value = pgbDownloadGesamt.Value + ProgressbarFortschritt
- End If
- If DateiD_Marker = 1 Then
- pgbDownloadEinzel.Value = 0
- DateiD_Download.DownloadFileAsync(New
- Uri("http://update.webseite.de/datei-d.dat"), "datei-d.dat") //
- Funktioniert nicht
- SaveSetting("Programm", "DateiVersionen", "Datei-D", DateiD_Web)
- pgbDownloadGesamt.Value = pgbDownloadGesamt.Value + ProgressbarFortschritt
- End If
- If DateiM_Marker = 1 Then
- pgbDownloadEinzel.Value = 0
- DateiM_Download.DownloadFileAsync(New
- Uri("http://update.webseite.de/datei-m.dat"), "datei-m.dat") //
- Funktioniert nicht
- SaveSetting("Programm", "DateiVersionen", "Datei-M", DateiM_Web)
- pgbDownloadGesamt.Value = pgbDownloadGesamt.Value + ProgressbarFortschritt
- End If
- If DateiY_Marker = 1 Then
- pgbDownloadEinzel.Value = 0
- DateiY_Download.DownloadFileAsync(New
- Uri("http://update.webseite.de/datei-y.dat"), "datei-y.dat") //
- Funktioniert nicht
- SaveSetting("Programm", "DateiVersionen", "Datei-Y", DateiY_Web)
- pgbDownloadGesamt.Value = pgbDownloadGesamt.Value + ProgressbarFortschritt
- End If
- btnStartProgram.Enabled = True
- End If
- pgbDownloadEinzel.Value = 100
- pgbDownloadGesamt.Value = 100
- End Sub
Was kann man da alles optimieren? Es ist wichtig die 4 Dateien einzeln zu behandeln da es z.B. vorkommen kann das nur Datei-Y und Datei-M aktualisiert werden müssen. Des Weiteren wie schon im Code ersichtlich habe ich ein Problem mit dem Kern des Programmes... dem Download. Soweit Google die Wahrheit sagt gibt es zwei Arten von Downloads. Einmal der Download via HTTPRequest welcher aber das Programm während des Downloads einfriert und einmal der Asynchrone Download. Es wäre wichtig das die Downloads direkt hintereinander erfolgen also zum Beispiel:
Datei-C und Datei-M haben eine höhere Webversion als die lokale Version. Also wird erst Datei-C gedownloadet (die Einzelprogressbar beginnt bei 0 und füllt sich mit dem Download, das Programm pausiert an der Stelle bis zum Ende, ist aber nicht eingefroren) und dann die Gesamtprogressbar auf 50 gesetzt (weil 100 / 2 = 50). Danach wird die Datei-M gedownloadet (die Einzelprogressbar setzt sich zurück und beginnt wieder sich zu füllen, genau das gleiche wie zuvor bei Datei-C).
Ich habe bereits mehrere Lösungen probiert doch fror mir entweder das Programm ein, die Downloads liefen nicht hintereinander oder es war nicht möglich eine Progressbar einzubinden. Langsam verzweifel ich...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nic“ ()