Update voor een programma

Status
Niet open voor verdere reacties.
Wat ik eigenlijk nog wilde zeggen is dat die tutorial in die video totaal niet compleet is, er schort van alles aan.

De reden dat je een melding krijgt dat het bestand wordt gebruikt door een ander proces is omdat het WebClient object nog niet is afgesloten (wat ook het geval is in die video). Je moet dus eerst het WebClient object afsluiten voordat je verder iets met het bestand gaat doen.

Afsluiten doe je met:
Code:
WebClient1.Dispose
WebClient1.Close

En volgens mij kun je gewoon WebClient1.DownloadFileAsync blijven gebruiken, want dat is het probleem niet.
 
PHP:
WebClient1.Dispose
WebClient1.Close

Moet zijn:

PHP:
WebClient1.Close()
WebClient1.Dispose()

Anders gooi je 'm al weg voordat je 'm sluit, lijkt me een error =)
 
Laatst bewerkt:
Nee dat geeft geen error.

Ik heb altijd gedacht dat Dispose vóór Close komt omdat Dispose eerst alle resources weggooit en dan pas kan je em echt afsluiten met Close.

Soms zie ik ook alleen Dispose en geen Close.
Beetje verwarrend is het wel.

Maar volgens mij is eerst Dispose, dan Close de beste optie.
 
Ik zal het beide proberen. maar waar moet dat bij staan. Bij webclient_downloadfilecompleted of onder button1? Ik denk zelf gewoon onder button1 omdat hij dat rijtje als het ware afwerkt toch?
 
Hij geeft nu dus wel die msgbox van "Hello" weer, maar het lijkt gewoon alsof hij blijft hangen in het lezen van de tekst...
De code is:
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
        Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        Dim read As String = WebClient1.DownloadString("http://mftpfaa.webs.com/version.txt")
        MsgBox("Hello")
        If Not read = "1.52" Then
            If read = "" Then
                Label1.Text = "Could not check for updates. Try later again"
            Else
                Label1.Text = "Newer version available (" & read & ")"
            End If
        End If
    End Sub

Maar als na msgbox("Hello") de regel van webclient1.dispose zet, rekent hij dat niet fout. Maar als ik na webclient1.dispose nog de regel typ van: webclient1.close dan zegt hij: close is not a member from webclient1...

Ik zal de code nu eens uitvoeren met alleen dispose!;)
 
In dat geval is WebClient1.Dispose voldoende. Ik was even vergeten dat niet alle objecten een .Close functie hebben.
Deze plaats je uiteraard NA het downloaden, dus in jouw geval boven of onder je MsgBox("Hallo").
 
Heb hem nu al 5 minuten aan staan maar hij wil die tekst file maar niet lezen... Kan dat liggen aan mijn eigen site die ik gratis gemaakt heb op www.webs.com? Ik weet niet waarom hij hem niet wil lezen. Kan ik hem denk je ook naar helpmij uploaden, en dan die link daarvan proberen? Of gaat hij dan ook een foutmelding geven omdat je moet inloggen om bestanden ophelpmij te kunnen zien?
 
Dan doe je toch echt iets verkeerd naar mijn mening. Ik download het tekst-bestand en vergelijk het, en heb het meer dan 10 keer geprobeerd. Alle keren werkte het perfect en kwam er enkel een kleine wacht-tijd van 1 a 2 seconden door het downloaden. Dat kan je in een nieuwe thread zetten wil je dat de main form (de GUI/graphical user interface waar alle buttons e/d op staan) niet vastloopt.

De code die ik gebruik:

PHP:
        If New Net.WebClient().DownloadString("http://mftpfaa.webs.com/version.txt") <> "1.52" Then
            MessageBox.Show("Er is een update.")
        Else
            MessageBox.Show("Er is geen update.")
        End If
 
Hoe zet je het in een nieuwe thread dan?
 
Allen zit er toch nog een foutje in. Want als ik nu dus doe:
Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
        Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        Dim read As String = WebClient1.DownloadString("http://www.mftpfaa.webs.com/version.txt")
        If Not read = "1.52" Then
            If read = "" Then
                Label1.Text = "Could not check for updates. Try later again"
            Else
                Label1.Text = "Newer version available (" & read & ")"
            End If
        End If
        Button1.Enabled = True
    End Sub
End Class

Dit is er nieuw in de code: De regel van: "If Not read" hier heb ik het nummer even veranderd naar 1.52, waarbij hij dus helemaal up-to-date zou moeten zijn omdat dat nummer ook in het version.txt file staat.
OOk de knop dat die na het hele proces weer beschikbaar word heb ik dus aangezet aan het einde van het procces.

Maar als hij al helemaal up-to-date is dan laat hij dat niet zien. Is deze code daar dan goed voor?
Code:
Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
        Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        Dim read As String = WebClient1.DownloadString("http://www.mftpfaa.webs.com/version.txt")
        If read = "1.52" Then
                Label1.text = "You have the newest version!"
            ElseIf read = "" Then
                Label1.Text = "Could not check for updates. Try later again"
            Else
                Label1.Text = "Newer version available (" & read & ")"
        End If
        Button1.Enabled = True
    End Sub
End Class
 
Laatst bewerkt:
Hoe zet je het in een nieuwe thread dan?

Dat hebben CaptainBri en ik al uitgelegd, zie hier en hier.

Die hele code onder Button1 lijkt me zowiezo niet goed, probeer het eens zo:

Code:
Button1.Enabled = False
        Label1.Text = "Checking for updates..."
If WebClient1.DownloadString("http://mftpfaa.webs.com/version.txt") > "1.52" Then 'Hier zeggen we letterlijk: als (if) versienummer in version.txt hoger (>) is dan de versie van het programma dat je nu gebruikt ("1.52"), dan is er een update, anders (else) niet
            MessageBox.Show("Er is een update.")
        Else
            MessageBox.Show("Er is geen update.")
        End If
        Button1.Enabled = True
 
Laatst bewerkt:
Deze is veel slimmer ja. De laatste van The Mighty Atom. Zelf had ik hem nog zo gemaakt:
Code:
Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        Dim read As String = WebClient1.DownloadString("http://www.mftpfaa.webs.com/version.txt")
        If read = "1.52" Then
            Label1.Text = "You have the newest version!"
        ElseIf read = "" Then
            Label1.Text = "Could not check for updates. Try later again"
        Else
            Label1.Text = "Newer version available (" & read & ")"
        End If
        Button1.Enabled = True

Maar het nadeel daarvan WAS (gebruik nu die van The mighty atom) dat als ik een foutje maakte met het nieuwe versie nummer invoeren (bijvoorbeeld 1.48 in plaats van 1.58) dan gaf hij ook aan dat er een update was:P

Ik ga nu die van The Mighty Atom dus gebruiken ;)
 
Nog 1 probleempje: Als ik nu (als gewone gebruiker van een van mijn programma's) eens op updates zou willen controleren. Dan voer ik dus dit uit. Maar als ik dus al de laatste versie heb, dan zegt hij alsnog: Er is een update beschikbaar.
 
Ik heb eventueel ook nog iets anders voor je. Ik heb een tijdje terug ook een update checker gemaakt en deze verwerkt in een dll bestand. Deze importeer ik dan in al mn projecten die een CheckForUpdate functie nodig hebben en vervolgens kan ik met een paar properties het hele gebeuren configureren. Meer komt er niet bij kijken.

Maar ik denk niet dat je dat nodig zult hebben.

Edit: Je moet natuurlijk ook niet vergeten het versie nummer van je nieuwe programma te verhogen en dat ook weer aanpassen in de code. Als je dat een keer zou vergeten krijg je dat dus.
 
Laatst bewerkt:
Nee dat vergeten zal ik niet doen, want ik sla alle dingen die ik kan vergeten in vb, of de gewone handige dingen van vb, gewoon op in: VB trucs :D
Slim he?!
Maar heb je enig idee hoe ik het kan verhelpen dat als je al met de meest recente versie werkt (wat je niet weet) dat je dan gaat updaten en hij zegt dat er een update is (naar 1.52, terwijl je die al gebruikt) dat hij dan niet de text van label1 verandert in: er is EEN update. Dat zou dus moeten worden: Er is géén update. Of in: Je bezit de nieuwste versie!

Hoe kan je dat maken?

P.s. Kan je me die dll lenen en uitleggen hoe hem te gebruiken? :D
 
Laatst bewerkt:
Hmm zou die al moeten doen. Als de versienummers gelijk zijn moet tie zeggen dat er geen nieuwe versie beschikbaar is. Als die dat bij jouw niet doet, schort er toch ergens iets aan, maar dan ik beter je hele project even bekijken om de fout te vinden.
 
Ok ik zal het inpakken in een zipje! Just a momento please ;)

P.s. Ik heb het hele geval even in een backgroundworker geplaatst zoals captainbri zei, maar dan geeft hij als foutmelding: Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement Label1 dan de thread waarop het element is gemaakt.
Bij die error is de regel van: Label1.Text = "Er is een update." geselecteerd
Nou is dat niet zo erg, want die background worker laat ik uiteindelijk toch achterweg, omdat ik de updater in een apparte form plaats, maar hoe zou je dat oplossen?

In de zip die ik je stuur staat GÉÉN backgroundworker!
 
Die error kan simpel oplossen door CheckForIllegalCrossThreadCalls = False voor het aanroepen van de thread te plaatsen.
Overigens raad ik wel aan om de BGW te behouden, voor functies als het controleren op updates is zo'n ding eigenlijk wel nodig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan