Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    [Visual c++] attendere fine di un download asincrono

    spero di non aver sbagliato sezione
    Sto creando un programma per scaricare da internet (più precisamente da una cartella pubblica di dropbox) dei file pdf (di cui so il link pubblico, salvato nel vettore listaurl)

    codice:
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    					
    					
    //Downloading è una variabile bool globale
    
    					if(!downloading)
    					{
    					downloading=true;
    
    					label1->Text="Download in corso";
    					WebClient^ client = gcnew WebClient;
    				 				 
    				    Uri^ indirizzo = gcnew Uri(listaurl[0]);
    				 
    				    client->DownloadFileAsync(indirizzo,"D:\obbiettivamente.pdf");
    					
    
    		
    					}
    
    			 
    			 }
    a questo punto, mentre il file si sta scaricando, l'utente può fare altre cose, tranne avviare un altro download.

    non appena il download è terminato voglio che venga eseguito questo codice

    codice:
    					label1->Text="Download completato";
    
    					downloading=false;
    come posso fare? è un problema se ho creato quel webclient localmente all'interno della funzione?

  2. #2

    Re: [Visual c++] attendere fine di un download asincrono

    Originariamente inviato da Rising1
    come posso fare?
    Intercetta l'evento DownloadFileCompleted.
    è un problema se ho creato quel webclient localmente all'interno della funzione?
    Credo di sì; anche se è allocato sul managed heap, all'uscita della funzione si perde l'unico riferimento con cui è raggiungibile dal programma, per cui può essere distrutto automaticamente dal GC; impostalo come membro della classe.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    Re: Re: [Visual c++] attendere fine di un download asincrono

    ok grazie! ora funziona

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    ultima cosa: per scaricare un file temporaneo (è un file "indice" che contiene tutti gli altri link publici) da cancellare al termine, dove lo posso scaricare in modo tale che su QUALUNQUE windows il file possa essere scaricato, salvato, aperto e chiuso senza ostacoli?

    avevo pensato in qualche cartella su C: ma forse sarebbe meglio salvarlo nella stessa cartella dove si trova l'eseguibile, ma come si fa a saperla?

  5. #5
    Originariamente inviato da Rising1
    avevo pensato in qualche cartella su C: ma forse sarebbe meglio salvarlo nella stessa cartella dove si trova l'eseguibile, ma come si fa a saperla?
    In c: non ha senso - potresti essere su una macchina che non ha nemmeno c:; tantomeno nella cartella del programma, se il programma è installato nella directory giusta gli utenti normali non hanno i diritti per modificare file in tale cartella.
    Il posto giusto dove scaricarlo è la directory dei file temporanei, che puoi ottenere tramite Environment.GetFolderPath o espandendo la variabile ambiente %tmp%; ma se comunque non ti serve salvare tale file ma solo leggere i dati in esso contenuti, perché usi DownloadFileAsync? Usa DownloadDataAsync, oppure apri uno stream in lettura usando OpenRead.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Originariamente inviato da MItaly
    In c: non ha senso - potresti essere su una macchina che non ha nemmeno c:; tantomeno nella cartella del programma, se il programma è installato nella directory giusta gli utenti normali non hanno i diritti per modificare file in tale cartella.
    Il posto giusto dove scaricarlo è la directory dei file temporanei, che puoi ottenere tramite Environment.GetFolderPath o espandendo la variabile ambiente %tmp%; ma se comunque non ti serve salvare tale file ma solo leggere i dati in esso contenuti, perché usi DownloadFileAsync? Usa DownloadDataAsync, oppure apri uno stream in lettura usando OpenRead.
    e per OpenRead che percorso gli passo? direttamente il link pubblico del file su dropbox?

  7. #7
    Originariamente inviato da Rising1
    e per OpenRead che percorso gli passo? direttamente il link pubblico del file su dropbox?
    Sì. (nota che sto parlando della OpenRead metodo di WebClient)
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Originariamente inviato da MItaly
    Sì. (nota che sto parlando della OpenRead metodo di WebClient)
    ok hai fatto bene a specificare perchè già avevo equivocato

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 © 2026 vBulletin Solutions, Inc. All rights reserved.