Problema Download File

di il
7 risposte

Problema Download File

Salve a tutti, ho un problema relativo a una sub, che si occupa di scaricare da un server alcuni File. premetto subito che è il primo programma che scrivo in vB, ho fatto un porting da un client scritto da me in java, quindi perdonate la poca eleganza del codice, ma ho fatto tutto con doc alla mano senza neanche sapere come si dichiarava una variabile xD. Sicuramente il problema, deriva da un algoritmo non molto corretto visto che ho avuto lo stesso problema nella controparte java. dato un array di alcuni File,(non è molto efficiente lo so, più avanti farà in modo che legga da un xml o altro soltanto i nomi dei file da scaricare senza fare il pappardellone) il client legge una versione dal server e se non corrisponde a quella istallata dal client blocca il tasto di avvio e costringe l'utente ad avviare una patch che si occupa di scaricare i contenuti. Il funzionamento è corretto, o almeno il suo lo fa. i file vengono scaricati senza problemi l'unico problema è che la barra di caricamento non avanza e non aggiorna l'utente circa lo svolgimento della funzione. il client resta congelato e soltanto quando finisce tutti i download da un +4 alla barra sblocca lo start client lo colora e tutto il resto. quindi il problema sta nel ciclo. come posso rendere efficiente questa funzione di download? a ogni file deve: comunicare il file che sta scaricando, dare il suo +6 alla barra(neanche questo è tanto bello a livello di codice dovevo gestire meglio a seconda della grandezza dei file, ma mi accontento di poco per il momento) e poi finito il download avvisare che il file è stato scaricato e riniziare con l'altro file.
 Private Sub patchButton_Click(sender As Object, e As EventArgs) Handles patchButton.Click
        Dim fileDownload(15) As String
        fileDownload(0) = "icon.eix"
        fileDownload(1) = "icon.epk"
        fileDownload(2) = "locale_tr.epk"
        fileDownload(3) = "locale_tr.eix"
        fileDownload(4) = "Metin2_patch_ZodiakMaps.eix"
        fileDownload(5) = "Metin2_patch_ZodiakMaps.epk"
        fileDownload(6) = "metin2_patch_ZodiakMonster.eix"
        fileDownload(7) = "metin2_patch_ZodiakMonster.epk"
        fileDownload(8) = "metin2_patch_ZodiarkArmor.eix"
        fileDownload(9) = "metin2_patch_ZodiarkArmor.epk"
        fileDownload(10) = "metin2_patch_ZodiarkEffect.eix"
        fileDownload(11) = "metin2_patch_ZodiarkEffect.epk"
        fileDownload(12) = "metin2_patch_ZodiarkWeapon.eix"
        fileDownload(13) = "metin2_patch_ZodiarkWeapon.epk"
        fileDownload(14) = "root.eix"
        fileDownload(15) = "root.epk"

        For Each item As String In fileDownload
            consoleLabel.Text = "Aggiornamento " + item + "..."
            If My.Computer.FileSystem.FileExists(currentPath + "\pack\" + item) Then
                My.Computer.FileSystem.DeleteFile(currentPath + "\pack\" + item)
                My.Computer.Network.DownloadFile(urlResource + item, currentPath + "\pack\" + item)
                ProgressBar1.Value = +6
                If My.Computer.FileSystem.FileExists(currentPath + "\pack\" + item) Then
                    consoleLabel.Text = item + "Aggiornato Correttamente"
                    ProgressBar1.Value = +6
                End If
            Else
                My.Computer.Network.DownloadFile(urlResource + item, currentPath + "\pack\" + item)
                consoleLabel.Text = item + "Aggiornato Correttamente"
                ProgressBar1.Value = +6
            End If
        Next
        ProgressBar1.Value = +4
        consoleLabel.Text = "Client Aggiornato Correttamente"
        consoleLabel.ForeColor = Color.Green
        patchButton.Enabled = False
        startClient.Enabled = True
        startClient.BackColor = Color.Orange
        My.Computer.FileSystem.DeleteFile(currentPath + "\" + versionFile)
        My.Computer.FileSystem.WriteAllText(currentPath + "\" + versionFile, versionServer, False)
        versionLabel.Text = "Version: " + My.Computer.FileSystem.ReadAllText(currentPath + "\" + versionFile)
        Me.Update()
    End Sub

7 Risposte

  • Re: Problema Download File

    Prima di tutto ... una domanda ...

    Con

    ProgressBar1.Value = +6

    cosa intendi fare ?
  • Re: Problema Download File

    oregon ha scritto:


    Prima di tutto ... una domanda ...

    Con

    ProgressBar1.Value = +6

    cosa intendi fare ?
    Incrementare il cursore della progressbar, come detto non so dichiarare neanche una variabile, programmo in java ho fatto tutto con doc alla mano. sono convinto non sia il metodo migliore ma se incrementa mi accontento di poco. sono comunque aperto ad altri suggerimenti 6 * 16 = 96 e il +4 finale ad arrivare a 100. giusto un modo per far vedere che comunque sta eseguendo il suo lavoro in background. perchè a scaricare scarica ma non mostra interazione sull'interfaccia
  • Re: Problema Download File

    Ma scusa, per incrementare una variabile di 6 come scrivi in Java ?
  • Re: Problema Download File

    oregon ha scritto:


    Ma scusa, per incrementare una variabile di 6 come scrivi in Java ?
    int variabileDaIncrementare = 0;

    variabileDaIncrementare += 6;

    ma il problema è che il programma non incrementa neanche il primo 6 :S l'interfaccia non risponde proprio.. rimane congelata e scarica tutti i file di colpo. poi finito il for each fa soltanto il +4 e le operazioni all'esterno del ciclo
  • Re: Problema Download File

    Hai notato che in Java scrivi

    +=

    e nel tuo programma

    = +

    ?
  • Re: Problema Download File

    oregon ha scritto:


    Hai notato che in Java scrivi

    +=

    e nel tuo programma

    = +

    ?
    Si oregon, ma il problema è un altro come ho scritto sopra: l'interfaccia non subisce cambiamenti a ogni giro di download dovrebbe incrementare e cambiare il testo label con item + "aggiornato correttamente" invece l'interfaccia si congela effettua tutto il lavoro in background e poi continua con le istruzioni fuori il ciclo.. apportare questa modifica non ha cambiato il succo del problema..premettendo che la tua osservazione è corretta e l'ho modificata.. se il problema fosse stato solo questo almeno il cambiamento del label che a me sembra corretto avrebbe dovuto farlo senza problemi.. ma niente..
  • Re: Problema Download File

    Dopo ogni modifica alla ProgressBar inserisci una linea

    Application.DoEvents()
Devi accedere o registrarti per scrivere nel forum
7 risposte