J'essaie d'obtenir la vitesse de téléchargement réseau de l'utilisateur actuel. Après avoir atteint une impasse avec NetworkInterfaces et tout ce que j'ai essayé, j'ai trouvé une solution en ligne. Je l'ai édité un peu et ça marche très bien mais ce n'est pas asynchrone.C# Vitesse de téléchargement asynchrone
public static void GetDownloadSpeed(this Label lbl)
{
double[] speeds = new double[5];
for (int i = 0; i < 5; i++)
{
int fileSize = 407; //Size of File in KB.
WebClient client = new WebClient();
DateTime startTime = DateTime.Now;
if (!Directory.Exists($"{CurrentDir}/tmp/speedtest"))
Directory.CreateDirectory($"{CurrentDir}/tmp/speedtest");
client.DownloadFile(new Uri("https://ajax.googleapis.com/ajax/libs/threejs/r69/three.min.js"), "/tmp/speedtest/three.min.js");
DateTime endTime = DateTime.Now;
speeds[i] = Math.Round((fileSize/(endTime - startTime).TotalSeconds));
}
lbl.Text = string.Format("{0}KB/s", speeds.Average());
}
Cette fonction est appelée dans un temporisateur à un intervalle de 2 minutes.
MyLbl.GetDownloadSpeed()
J'ai essayé d'utiliser WebClient.DownloadFileAsync mais qui montre juste le symbol.My illimité prochain essai serait d'utiliser HttpClient mais avant d'aller sur ce que quelqu'un a une méthode recommandée pour obtenir les utilisateurs actuels télécharger la vitesse de manière asynchrone (sans retarder le fil principal de l'interface graphique)?
Vous devez inclure le code que vous avez essayé avec 'DownloadFileAsync'. Je suppose que vous avez provoqué un blocage en appelant 'Result' ou' Wait' quelque part sur la tâche résultante. –
Essayez 'await Task.Run (() => {// votre code}); –
Merci @ PhilippeParé Ça a marché! –