Evitare blocco Form

di il
3 risposte

Evitare blocco Form

Salve a tutti, ho il seguente problema con VB 2010: a un certo punto del mio programma avvio una richiesta verso un URL per farmi restituire la dimensione del file da scaricare con i seguenti comandi:
...
response = request.GetResponse()
Return response.ContentLength
...
Il problema è che da qualche giorno, qualunque sia l''URL interrogato, il server ci mette (inspiegabilmente) troppo a rispondere (anche 20 o 30 secondi) e per tutto questo tempo il form rimanere bloccato (finchè non ha ricevuto la risposta del server).
C'è un modo per non far bloccare il form pur essendo la richiesra ancora in attesa?
Spero possiate aiutarmi.

3 Risposte

  • Re: Evitare blocco Form

    Ciao Mark892,
    in generale devi fare l' operazione in un thread differente in modo che la finestra principale non si blocchi. Per fare questo puoi usare le classi 'Thread' oppure 'BackgroundWorker' .

    In alternativa se stai usando classi come HttpWebRequest o HttpClient puoi utilizzare i loro metodi asincroni. In pratica sono chiamate di funzione che vendono eseguite in un thread separato e ti restituiscono i risultati in una funzione di callback. Se ti servono degli esempi chiedi pure.

  • Re: Evitare blocco Form

    Ciao barba59 e grazie per la risposta.
    Effettivamente ero riuscito in questi giorni a risolvere la cosa utilizzando BackgroundWorker, ma ho preferito aggirare il problema (senza risolverlo) in un altro modo.
    Il problema in questione è che da qualche giorno la funzione
    Return response.ContentLength
    ci mette tantissimo tempo (anche fino a 40 secondi, mentre prima era istantanea) a ottenere la dimensione del file dal server (ho provato ovviamente con più URL) pur essendo la mia connessione ottima.
    PS: sto costruendo un download manager (completo di resume) e la dimensione totale del file mi serve in anticipo per calcolare il tempo rimanente e la percentuale di download
  • Re: Evitare blocco Form

    PS: sto costruendo un download manager (completo di resume) e la dimensione totale del file mi serve in anticipo per calcolare il tempo rimanente e la percentuale di download
    Se fai una richiesta col metodo HEAD ottieni solo la riposta dal server senza il body. L' rfc2616 non richiede espressamente che 'Content-Lenght' venga restituita. In questo caso avviene un trasferimento (GET) in chunked con Transfer-Encoding.... e ti attacchi al tram (metodo urbano utilizzato dalle mie parti)
Devi accedere o registrarti per scrivere nel forum
3 risposte