Résolu Comment savoir la vitesse de téléchargement dans son application C#

Statut
N'est pas ouverte pour d'autres réponses.
Inscription
29 Décembre 2013
Messages
704
Réactions
276
Points
14 496
RGCoins
25
Bonjour je chercher comment je pourrais avoir la vitesse a la quelle je telecharge dans mon application C#
donc j'ai fait une aplication de téléchargement et je voudrais que l'on vois la vitesse de téléchargement mais je ne connais pas le code quelqu'un peut m'aidez ? :)
Merci d'avance :*
 
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
 
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
Oui c'est une application pour téléchargé des fichier
- il me faut juste pour savoir la vitesse de DL :p :) tous est deja fait :)
 
Oui c'est une application pour téléchargé des fichier
- il me faut juste pour savoir la vitesse de DL :p :) tous est deja fait :)
Regarde le code que j'ai donner, tu va trouver des similitude avec le tient je pense, reprend l'événements du ProgressChanged et tu l'inclu dans ton code :)
 
Regarde le code que j'ai donner, tu va trouver des similitude avec le tient je pense, reprend l'événements du ProgressChanged et tu l'inclu dans ton code :)
sa marche :D :) Thanks

:)
 
Si tu n'as que 2 conditions pas besoins d'ajouter else if, un else suffit, soit tu met 2 fois if suvis de ta condition, soit tu met if au premier et else au deuxième sans conditions :)

enfaite cest pareille avec les 2 cest sa que je comprend pas :triste:
 
Essai de cette manière :

Code:
if (LogInComboBox1.SelectedIndex == 0)
{
//loginComboBox2.Items.Insert(0, "CECHA");
//etc...
}
else
{
//idem ton code ici
}
Ouai merci :ok: j'avais pas pensez a ce code je le mais que dans les toggle check box etc... mais je pensez pas que sa marcherais sur une combo :neo:
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut