Salut,
Je pense que tu utilise Le WebClient pour télécharger dans ton applications mais pour ça il va falloir utiliser un second thread pour pas figer l'UI je te fait un exemple rapide
Déjà les usings :
Code:
usingSystem.Diagnostics;
usingSystem.IO;
usingSystem.Net;
Dans public partial class tu ajoute 2 variable qui vont nous servir
Code:
WebClient webClient;
Stopwatch sw=newStopwatch();
Ensuite tu fait 3 fonctions, une pour télécharger, l'autre pour l'avancement du téléchargement et la récupération des infos que tu veux et la 3 éme pour dire que le téléchargements est terminé
Code:
public void DownloadFile(string urlAddress, string location)
{
using (webClient = new WebClient())
{
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//creation de nouveau evenement
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);//comme au dessus
Uri URL = urlAddress.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ? new Uri(urlAddress) : new Uri("http://" + urlAddress);
sw.Start();
try
{
webClient.DownloadFileAsync(URL, location);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
labelSpeed.Text = string.Format("{0} kb/s", (e.BytesReceived / 1024d / sw.Elapsed.TotalSeconds).ToString("0.00"));//vitesse
progressBar.Value = e.ProgressPercentage;//barer de progression si jamais tu en met une
labelPerc.Text = e.ProgressPercentage.ToString() + "%";//pourcentage télécharger
labelDownloaded.Text = string.Format("{0} MB's / {1} MB's",//Le nombre de MB téléchargé sur le nombre de MB total
(e.BytesReceived / 1024d / 1024d).ToString("0.00"),
(e.TotalBytesToReceive / 1024d / 1024d).ToString("0.00"));
}
private void Completed(object sender, AsyncCompletedEventArgs e)
{
sw.Reset();
if (e.Cancelled == true)
{
MessageBox.Show("Téléchargement annulé");
}
else
{
MessageBox.Show("Téléchargement complété");
}
}
Voilà les 3 fonctions, c'est le plus simple, après tu peux utiliser un BackgroundWorker pour savoir si le thread est occupé ou non etc... mais c'est déjà pas mal. Si tu veux te servir des 3 fonctions au dessus t'as juste a indiquer pour télécharger "DownloadFile(lien web, emplacement d'enregistrement);" (tu le met dans un bouton) pas besoins d'ajouter autre chose puisque les 2 autre fonctions sont appeler dans DownloadFile
Tu peux améliorer la chose pour que le chemin d'enregistrement corresponde au path d'un SaveFileDialog

MP moi si tu veux de l'aide pour ça
Bonne après-midi,
DEVR0