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

    Monitoraggio di un download in VB6

    Ciao,

    sto sviluppando un controllo ActiveX che mi permette di scaricare un file da Internet via Http usando il metodo AsyncRead. Tale controllo è provvisto anche di una finestra di dialogo che da la possibilità all'utente di annullare il download lanciato e mostra la percentuale di progresso del download.

    E fino a qui nessun problema. Adesso vorrei sapere come è possibile intercettare lo stato del download in corso (se è tutto ok, se è fallito, se è completato, se sta ancora elaborando, ecc) e gli eventuali errori che si possono verificare durante il download (ad es. se cade la connessione e il download fallisce, oppure se i dati arrivano corrotti, ecc...).

    Credo che sia possibile fare ciò usando le costanti vbAsyncStatusCodeConstants e l'oggetto AsyncProp degli eventi UserControl_AsyncReadProgress e UserControl_AsyncReadComplete ma non ho ben capito come fare e se è possibile fare ciò seguendo questa strada.

    Infine, vorrei dei suggerimenti per calcolare il tempo stimato per il download del file e la velocità del download (Kbps). Aggiungo che dispongo di una funzione per conoscere la dimensione del file in remoto.

    Accetto ogni tipo di suggerimento. Grazie,

    Pray your God or burn in my Hell

  2. #2
    Hey, nessuno sa aiutarmi??
    Pray your God or burn in my Hell

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Con tutta franchezza, il fatto è che districarsi tra API, costanti e interazione con varie DLL, per uno strumento obsoleto come il VB6, quando il mondo .NET mette a disposizione varie possibilità molto più efficienti e moderne, potrebbe essere ritenuto da molti frequentatori del forum come una perdita di tempo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Si lo so. Devi sapere però che frequento il V anno di ragioneria, indirizzo Mercurio, e nella pubblica ammistrazione non sempre si è al passo con i tempi (visto che usano ancora VB6 perchè non si decidono di comprare le licenze per il VB.Net). Quindi per non fare confusione tra linguaggi (visto che studio solo perchè a scuola faccio pocho e niente - stiamo ancora nel fare una ricerca in un array!!! - cerco di approfondire quanto più possibile la faccenda) aspetto il diploma per evolvere al .Net

    Anzi, a dire la verità penso che mi butterò sul C++ perchè sembra che offra più possibilità rispetto al Basic anche se è più complicato da usare. Poi vedrò...

    Inoltre cercando su Internet non sempre trovo risposte adeguate alle mie domande, che a dire la verità mi sembrano alquanto singolari no?? e allora posto sul forum dato che neanche i miei prof. di informatica sanno rispondermi (non sto scherzando!!)

    Ho cercato anche dei volumi che trattano più a fondo il VB6 in libreria ma con l'uscita del NET le case produttrici hanno terminato la distribuzione di manuali sul VB6 rimpiazzandole con il NET.

    Cerca di comprendere la mia situazione.
    Pray your God or burn in my Hell

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Hell_Devil
    Si lo so. Devi sapere però che frequento il V anno di ragioneria, indirizzo Mercurio, e nella pubblica ammistrazione non sempre si è al passo con i tempi (visto che usano ancora VB6 perchè non si decidono di comprare le licenze per il VB.Net).
    Esistono le versioni Express, gratuitamente scaricabili, senza necessità di licenza a pagamento.

    Anzi, a dire la verità penso che mi butterò sul C++ perchè sembra che offra più possibilità rispetto al Basic anche se è più complicato da usare. Poi vedrò...
    Anche per il C++ c'è la versione Express

    Inoltre cercando su Internet non sempre trovo risposte adeguate alle mie domande, che a dire la verità mi sembrano alquanto singolari no?? e allora posto sul forum dato che neanche i miei prof. di informatica sanno rispondermi (non sto scherzando!!)
    Va bene per il forum ma otterresti molte più info per .NET sia in rete sia nel forum.

    Ho cercato anche dei volumi che trattano più a fondo il VB6 in libreria ma con l'uscita del NET le case produttrici hanno terminato la distribuzione di manuali sul VB6 rimpiazzandole con il NET.
    Esatto

    In ogni caso, leggi questa nota della Microsoft

    http://support.microsoft.com/kb/200676
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Si, ho già visto quel link tempo fa ed è stato il punto di partenza per lo sviluppo del mio progretto. Peccato che sia un pò troppo limitato in fatto di nozioni... cercavo qualcosa in più.

    Ho guardato molti link e scaricato numerosi esempi (anche in spagnolo , poi arrivando alle pagine in tedesco ho rinunciato ), ma avrei voluto l'opinione di qualcuno che ha già fatto qualcosa del genere.

    Provando e riprovando, però, sono arrivato a questo risultato:

    codice:
    Private Sub UserControl_AsyncReadComplete (AsyncProp As AsyncProperty)
        If AsyncProp.StatusCode=vbStatusCodeError Then 'Controlla se si è verificato un errore
            Msgbox "Il download è fallito"
        Else
            hFile=FreeFile
            Open <nome file> For Binary As #hFile
            Get #hFile, ,AsyncProp.Value
            Close #hFile
        End If
    End Sub
    ma così non so quale tipo di errore si è verificato.

    Per calcolare il tempo stimato del download invece faccio così (volevo sapere se il ragionamento è corretto ed avere suggerimenti su come migliorare):

    codice:
    Private Sub UserControl_AsyncReadProgress (AsyncProp As AsyncProperty)
        Static LastBytesRead As Long
    
        If AsyncProp.BytesRead > 0 Then
            dwTime = (AsyncProp.BytesMax - LastBytesRead) / (AsyncProp.BytesRead - LastBytesRead)
            LastBytesRead = AsyncProp.BytesRead
        End If
    End Sub
    e così dwTime diminuisce man mano che il download procede ma sarà un risultato attendibile??

    L'ultima cosa è la velocità del download che proprio non riesco a calcolare.

    Sei la mia ultima speranza perchè non so proprio che fare
    Pray your God or burn in my Hell

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Si, l'ho visto ieri pomeriggio e ho preso spunto per il codice che ho postato prima. Peccato però che non indica il tipo di errore specifico: cioè ti dice che c'è stato un errore ma non si sa quale.

    Poi l'articolo non accenna proprio a calcolare la velocità del download. Nel frattempo ho provato questo, ma non funziona:

    codice:
    Private Sub UserControl_AsyncReadProgress (AsyncProp As AsyncProperty)
        dim LastReading As Long
    
        If AsyncProp.BytesRead > 0 Then
            Kbps = IIf (LastReading = 0, 0,  AsyncProp.BytesRead / 1024 / (Timer - LastReading) *1000
            LastReading = Timer    
         End If
    End Sub
    Kbps è sempre un valore inferiore ad uno, mentre se scarico lo stesso file manualmente (o anche usando l'API DoFileDownload) e vedo il numero di KB scaricati/sec si aggira sui 200-220 KB/sec. Perchè??
    Pray your God or burn in my Hell

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Hell_Devil
    Si, l'ho visto ieri pomeriggio e ho preso spunto per il codice che ho postato prima. Peccato però che non indica il tipo di errore specifico: cioè ti dice che c'è stato un errore ma non si sa quale.
    Non è vero ... in quel caso, visualizza il valore di

    AsyncProp.Status
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Se ti riferisci a questo spezzone di codice:
    codice:
    Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty) 
     
        On Error Resume Next 
     
            If AsyncProp.BytesMax <> 0 Then 
                RaiseEvent DownloadProgress(CLng(AsyncProp.BytesRead), CLng(AsyncProp.BytesMax), AsyncProp.PropertyName) 
            End If 
     
            Select Case AsyncProp.StatusCode 
              Case vbAsyncStatusCodeSendingRequest 
                Debug.Print "Attempting to connect", AsyncProp.Target 
              Case vbAsyncStatusCodeConnecting 
                Debug.Print "Connecting", AsyncProp.Status 'ÏÔʾģ°åIP 
              Case vbAsyncStatusCodeBeginDownloadData 
                Debug.Print "Begin downloading", AsyncProp.Status 'ÏÔʾÁÙʱ±£´æÎļþ·¾¶ 
                'Case vbAsyncStatusCodeDownloadingData 
                '  Debug.Print "Downloading", AsyncProp.Status 'ÏÔʾĿ±ê URL 
              Case vbAsyncStatusCodeRedirecting 
                Debug.Print "Redirecting", AsyncProp.Status 
              Case vbAsyncStatusCodeEndDownloadData 
                Debug.Print "Download complete", AsyncProp.Status 
              Case vbAsyncStatusCodeError 
                Debug.Print "Error...aborting transfer", AsyncProp.Status 
                CancelAsyncRead AsyncProp.PropertyName 
            End Select 
     End Sub
    la riga di codice evidenziata non si verifica mai in questo evento, ma invece nell'evento AsyncReadComplete e comunque non restituisce il tipo di errore (AsyncStatus ritorna il nome del file).

    A parte questo, hai visto il codice che ho postato prima per il calcolo del tempo stimato per la fine del download e la velocità di trasfermento? Se si, hai qualche idea e suggerimento in merito?
    Pray your God or burn in my Hell

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.