jak pokazac 'download speed'

0

Jak na labelu pokazac aktualna predkosc sciagania pliku?

void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            double bytesIn = double.Parse(e.BytesReceived.ToString());
            double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
            double percentage = bytesIn / totalBytes * 100;
       
            toolStripProgressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());

            speed_label.Text = ;

        }
1

Nie może być

speed_label.Text = e.BytesRecived;
?

Jeśli nie to musisz sobie to sam napisać, tzn. wyliczyć ile się ściągnęło na sakundę np. i pisać do labela.

0

speed_label.Text = e.BytesRecived;

pokaze ile pobrano bajtow, a nie z jaka predkoscia ;)

1

No właśnie. Żeby otrzymać prędkość musiałbyś podzielić tę liczbę na ilość sekund w których się pobierały. Sposobów jest sporo, np. zapamiętanie ostatniego czasu.

0

Mozesz uzyc

Jak masz ProgressBara to mozesz zrobic

progressBar.Value = e.ProgressPercentage;

e.ProgressPercentage zwraca int od 1-100 :)

0
Stopwatch stoper = new Stopwatch();
long timerPrev = 0;
long bytesPrev = 0;
long speed = 0;
Queue<long> queue = new Queue<long>();
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    if (e.BytesReceived - bytesPrev > 102400)
    {
        long tim = stoper.ElapsedMilliseconds - timerPrev;
        if (tim > 0)
        {
            speed = (e.BytesReceived - bytesPrev) / tim;
            bytesPrev = e.BytesReceived;
            timerPrev = stoper.ElapsedMilliseconds;
            queue.Enqueue(speed);
            if (queue.Count > 10) queue.Dequeue();
            speed = queue.Sum() / queue.Count();
        }
    }
    label1.Text = (speed*1000)/1024;
}

Przed wywołaniem DownloadFileAsync startujemy stoper
stoper.Start();

Co 100kb obliczamy predkosc (pobrane - poprzednie)/(aktualny_czas - poprzedni)
Wyliczona predkosc wrzucamy do kolejki FIFO, aby wyliczyc predkosc srednia z ostatnich 10 predkosci

0

'System.Collections.Generic.Queue<long>' does not contain a definition for 'Sum' and no extension method 'Sum' accepting a first argument of type 'System.Collections.Generic.Queue<long>' could be found (are you missing a using directive or an assembly reference?)
error CS1955: Non-invocable member 'System.Collections.Generic.Queue<long>.Count' cannot be used like a method.

0

zrób using Linq na początku kodu.

0

Dodaj sobie

using System.Linq;

0

ok kompiluje sie ale nie liczy predkosci poprawnie ;/

0

user image

460kb/s * ~12sek = 5460 kb

To by się chyba zgadzało. Coś pomieszałeś

0
namespace downloader
{
    public partial class Form1 : Form
    {
        Stopwatch stoper = new Stopwatch();
        long timerPrev = 0;
        long bytesPrev = 0;
        long speed = 0;
        Queue<long> queue = new Queue<long>();
        List<string> links = new List<string>();
        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WebClient wc = new WebClient();
            stoper.Start();
            wc.DownloadFileAsync(new Uri(link), sciezka);
            wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
            wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
        }

        void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            if (e.BytesReceived - bytesPrev > 102400)
            {
                long tim = stoper.ElapsedMilliseconds - timerPrev;
                if (tim > 0)
                {
                    speed = (e.BytesReceived - bytesPrev) / tim;
                    bytesPrev = e.BytesReceived;
                    timerPrev = stoper.ElapsedMilliseconds;
                    queue.Enqueue(speed);
                    if (queue.Count > 10) queue.Dequeue();
                    speed = queue.Sum() / queue.Count();
                }
            }
            label1.Text = "Avg: " + (speed * 1000) / 1024;
        }

        void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Error != null)
                log.AppendText(e.Error.Message);
            stoper.Stop();
        }
    }
}
0

ok teraz dziala thx

1 użytkowników online, w tym zalogowanych: 0, gości: 1