Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB6] Download file senza blocco applicazione.

    Salve a tutti.
    Ho realizzato un applicativo stand-alone in VB6 che dovrà essere usato da diversi utenti, ciascuno sulla sua piattaforma. Fin qui niente di strano, ma ho implementato la possibilità di confrontare la versione di compilazione con quella contenuta in un file binario posto da me sul mio sito, al fine di informare i diversi utenti della disponibilità di aggiornamenti.
    Ho implementato una routine che scarica il file binario (meno di 1kB) dal sito http.
    Funziona tutto, anche se la connessione è assente, ma mi è capitato con un utente di avere connessione disponibile ed avere una lentezza esagerata del download, fatto che di per se provoca un blocco dell'applicazione.
    Ho cercato in rete eventuali metodi alternativi che non blocchino l'applicazione durante il download, ma sono tutti troppo "completi" per le mie necessità, ossia includono barre di progresso, siti ftp, etc.
    A me serve solo una funzione che sostituisca la mia API utilizzata per il download del file, ma che non blocchi l'applicativo.
    La routine è la seguente (chiamata dall'evento click di un pulsante)
    codice:
    Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    Public Sub CheckAggiornamenti()
        On Error Resume Next
        Dim errcode As Long, Urls As String, LocalFileNames As String, Versione As VerAggiornamento
        Presentazione.Avvio.Caption = "Controllo Aggiornamenti..."
        Presentazione.Avvio.Refresh
        Urls = "http://miosito/ver.bin"
        LocalFileNames = App.Path & "\ver.tmp"
        errcode = URLDownloadToFile(0, Urls, LocalFileNames, 0, 0)
        MioForm.Caption = "Mio - ver " & App.Major & "." & App.Minor & "." & App.Revision
        If Err.Number = 0 And errcode = 0 Then
            Open LocalFileNames For Binary As #1
            Get #1, , Versione
            Close #1
            If CLng(App.Major) < Versione.Maggiore Or CInt(App.Minor) < Versione.Minore Or CInt(App.Revision) < Versione.Revisione Then
                MioForm.Caption = MioForm.Caption & " - E' disponibile la versione " & Versione.Maggiore & "." & Versione.Minore & "." & Versione.Revisione & ", contattare me@gmail.com"
                If Err.Number = 0 Or errcode = 0 Then Presentazione.Avvio.Caption = "Aggiornamento disponibile: ver. " & Versione.Maggiore & "." & Versione.Minore & "." & Versione.Revisione: Presentazione.Avvio.Refresh
            Else
                If Err.Number = 0 Or errcode = 0 Then Presentazione.Avvio.Caption = "La versione in uso è la più recente."
                Presentazione.Avvio.Refresh
            End If
        End If
        Kill App.Path & "\ver.tmp"
        If Err.Number <> 0 Or errcode <> 0 Then
            Err.Clear
            Presentazione.Avvio.Caption = "Controllo Aggiornamenti non riuscito."
            Presentazione.Avvio.Refresh
        End If
        On Error GoTo 0
    End Sub
    Dove Presentazione è un form che contiene la label Avvio, il resto sono variabili type fatte da me.
    Ripeto che il sistema funziona su più di 20 macchine, ma su una no , il che ha sollevato in me la perplessità oggetto di questa richiesta di aiuto .
    Ringrazio coloro i quali sappiano darmi delle indicazione.
    Michele.

  2. #2
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Puoi implementare il tuo codice in un thread diverso da quello principale:
    http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
    Comunque se hai già trovato degli esempi puoi sempre studiarteli e togliere il superfluo...

  3. #3
    Grazie, mi sembra un ottima soluzione, l'importante è che l'applicazione non si blocchi.
    Non so se esistono metodi migliori per confrontare la versione in uso con una remota di riferimento, ma credo che per ora io possa risolvere così.
    Grazie mille.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.